Как я нахожу и уничтожаю удаленные процессы в Linux?

Я разрабатываю демона, который капризничает, и я теперь не могу создать любые новые процессы (т.е. Я не могу запустить новый процесс для уничтожения других процессов жулика). Так, я должен смочь уничтожить процессы от удаленной машины. Как делают я действительно "уничтожаю" удаленно без административных привилегий? Если я не могу уничтожить свой собственный процесс от удаленной машины, поскольку обычный пользователь затем говорит мне так, что я могу отметить его как корректный ответ.

1
задан 29.10.2010, 00:48

3 ответа

Для уничтожения процесса, работающего на машине, некоторый локальный процесс (или ядро) должен испустить сигнал уничтожения. Таким образом, Вам нужен способ заставить процесс испускать тот сигнал, и так как Вы не можете создать новый процесс, необходимо найти путь, который полагается исключительно на уже рабочие процессы.

Нет никакого типичного демона, который может помочь Вам там. Они все обработали бы Вашу аутентификацию, затем разветвили бы новый процесс (такой как оболочка) работающий как Вы. Таким образом, если Вы не имеете никакого консольного доступа и не имеете никакого существующего взаимодействия с машиной, Вам не повезло.


Из Ваших комментариев это кажется, что у Вас все еще есть оболочка на машине. Затем существуют вещи, которые можно сделать. Вы не можете выполнить внешний процесс, такой как ls или ps. Но можно выполнить встроенные команды такой как echo, read, и kill (kill не встроенное во всех оболочках, но это один во всех оболочках, которые поддерживают управление заданиями, такое как удар и zsh).

Каждый процесс имеет связанный каталог под /proc: /proc/12345 где 12345 идентификатор процесса. Таким образом можно получить некоторую информацию о вырезании путем исследования /proc. echo с подстановочными знаками полезно здесь, например. cd /proc; echo [0-9]* показывает идентификаторы процесса всех рабочих процессов. Если оболочка является zsh, можно сделать много со спецификаторами шарика; например, echo /proc/*(u$UID) шоу только процессы, работающие под Вашим идентификатором пользователя.

Способ отобразить содержание файла без разветвления

while read -r line; do
  echo "$line"
done </path/to/file

Можно уничтожить много процессов сразу путем передачи их всех kill. При идентификации процесса, который принадлежит демону, попытайтесь уничтожить его группу процесса с kill -9 -PGID где PGID идентификатор процесса лидера группы. Можно найти идентификатор группы процесса процесса 123 с </proc/123/stat read pid tcomm state ppid pgrp sid more; echo $pgrp. (Та же информация существует в большем количестве удобочитаемой формы в /proc/123/ но Вы не находитесь в хорошем состоянии считать его.) Можно также попробовать, отправляют сигнал во все процессы (включая инициирующую оболочку) с

trap : NUM
kill -NUM -1

Выберите значения ЦИФРЫ кроме KILL (9) так, чтобы trap команда действительно заставляет Вашу оболочку игнорировать сигнал (KILL не может быть захвачен).

7
ответ дан 12.12.2019, 07:45

Следующая информация была найдена по http://www.cyberciti.biz/faq/kill-process-in-linux-or-terminate-a-process-in-unix-or-linux-systems/

Уничтожьте использование процесса, уничтожают команду в соответствии с Linux/UNIX

уничтожьте работы команды и в соответствии с Linux и в соответствии с UNIX/BSD как операционные системы.

шаг № 1: Во-первых, необходимо узнать, обрабатывают PID (идентификатор процесса)

Используйте команду PS или команду pidof для обнаружения идентификатора процесса (PID). Синтаксис: PS aux | grep processname pidof processname

Например, если имя процесса является lighttpd, можно использовать любую из следующей команды для получения идентификатора процесса:

ps aux | grep lighttpdOutput

lighttpd  3486  0.0  0.1   4248  1432 ?        S    Jul31   0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
lighttpd  3492  0.0  0.5  13752  3936 ?        Ss   Jul31   0:00 /usr/bin/php5-cg

ИЛИ используйте команду pidof, которая является использованием для нахождения идентификатора процесса под управлением программы:

pidof lighttpd

Вывод

3486

Шаг № 2: уничтожьте процесс с помощью PID (идентификатор процесса)

Выше команды говорят Вам PID (3486) из процесса lighttpd. Теперь уничтожьте процесс с помощью этого PID:

# kill 3486

ИЛИ

# kill -9 3486

Где,-9 специальный Сигнал уничтожения, который уничтожит процесс.

killall управляют примерами

НЕ ИСПОЛЬЗУЙТЕ команду killall в системе UNIX (Linux только управляют). Можно также использовать команду killall. Команда killall уничтожает процессы по имени (никакая потребность найти PID):

# killall -9 lighttpd

Уничтожьте процесс Firefox:

# killall -9 firefox-bin

Как я сказал ранее killall относительно системы UNIX, делает что-то еще. Это уничтожает весь процесс и не только определенный процесс. Не используйте killall в системе UNIX (использование уничтожают-9).

2
ответ дан 12.12.2019, 07:45

Как Вы сказали в своем комментарии, администратор является единственным человеком, который может помочь Вам в этой точке. Я предлагаю, чтобы Вы получили поваренную книгу Perl и считали раздел 16.19 для корректного метода обработки зомби.

1
ответ дан 12.12.2019, 07:45

Теги

Похожие вопросы