linux -команда ‘ps’ выдает неверный pid или ошибка sigkill не находит pid

#android #signals #kill-process #sigkill

#Android #сигналы #убить процесс #ошибка sigkill

Вопрос:

Существует постоянный процесс, который я хочу постоянно убивать. Для этого я создал очень простой скрипт на python:

 import os
import signal
While True:
    os.system("ps >> /sdcard/newdata.txt")
    file = open("/sdcard/newdata.txt","r")
    for x in file:
        if (len(x.split())<9):
            continue
        elif (x.split()[8] == "/system/bin/XXXX"):
            pid = int(x.split()[1])
            os.kill(pid, signal.SIGKILL)
            break
    file.close()
  

XXXX представляет собой двоичное имя файла, который запускает процесс.
В моем конкретном случае этот двоичный файл, XXXX, является хорошим способом распознавания процесса, который я хочу остановить.

Я думаю, что это должно сработать, но вместо этого оно возвращает ошибку:

«ProcessLookupError: [Ошибка 3] Такого процесса нет»

Я напечатал pid и запустил скрипт несколько раз. pid исправлен, что должно означать, что процесс не возрождался, тем не менее, он всегда возвращает ошибку, как будто pid неверен.

Кто-нибудь может это объяснить?

Комментарии:

1. Распечатайте свой ps вывод, чтобы увидеть, что, вероятно, это не то, что вы хотите, также внутри python script print x.split()[1] , чтобы увидеть, что, вероятно, это не pid. Вы должны использовать ps -e или ps aux или pgrep или pkill , в зависимости от того, что это за XXXX, которому вы соответствуете, часть процесса? полной команды? и т.д.

2. Ваш вопрос помечен как linux, что это /system/bin/ , andoid? Какая у вас операционная система?

3. @thanasisp ты меня понял, это Android

4. @thanasisp конечно, я напечатал переменные. pid совпадает с тем, который получен из вывода ps. Я не совсем понимаю, почему использование ‘ps-e’ или ‘ps-aux’ или ‘pgrep’ что-то изменит

5. Вы могли бы запустить только одну команду bash pgrep XXXX | xargs kill -9 .