Я разрабатываю демона, который капризничает, и я теперь не могу создать любые новые процессы (т.е. Я не могу запустить новый процесс для уничтожения других процессов жулика). Так, я должен смочь уничтожить процессы от удаленной машины. Как делают я действительно "уничтожаю" удаленно без административных привилегий? Если я не могу уничтожить свой собственный процесс от удаленной машины, поскольку обычный пользователь затем говорит мне так, что я могу отметить его как корректный ответ.
Для уничтожения процесса, работающего на машине, некоторый локальный процесс (или ядро) должен испустить сигнал уничтожения. Таким образом, Вам нужен способ заставить процесс испускать тот сигнал, и так как Вы не можете создать новый процесс, необходимо найти путь, который полагается исключительно на уже рабочие процессы.
Нет никакого типичного демона, который может помочь Вам там. Они все обработали бы Вашу аутентификацию, затем разветвили бы новый процесс (такой как оболочка) работающий как Вы. Таким образом, если Вы не имеете никакого консольного доступа и не имеете никакого существующего взаимодействия с машиной, Вам не повезло.
Из Ваших комментариев это кажется, что у Вас все еще есть оболочка на машине. Затем существуют вещи, которые можно сделать. Вы не можете выполнить внешний процесс, такой как 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
не может быть захвачен).
Следующая информация была найдена по http://www.cyberciti.biz/faq/kill-process-in-linux-or-terminate-a-process-in-unix-or-linux-systems/
уничтожьте работы команды и в соответствии с Linux и в соответствии с UNIX/BSD как операционные системы.
Используйте команду 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
Выше команды говорят Вам PID (3486) из процесса lighttpd. Теперь уничтожьте процесс с помощью этого PID:
# kill 3486
ИЛИ
# kill -9 3486
Где,-9 специальный Сигнал уничтожения, который уничтожит процесс.
НЕ ИСПОЛЬЗУЙТЕ команду killall в системе UNIX (Linux только управляют). Можно также использовать команду killall. Команда killall уничтожает процессы по имени (никакая потребность найти PID):
# killall -9 lighttpd
Уничтожьте процесс Firefox:
# killall -9 firefox-bin
Как я сказал ранее killall относительно системы UNIX, делает что-то еще. Это уничтожает весь процесс и не только определенный процесс. Не используйте killall в системе UNIX (использование уничтожают-9).
Как Вы сказали в своем комментарии, администратор является единственным человеком, который может помочь Вам в этой точке. Я предлагаю, чтобы Вы получили поваренную книгу Perl и считали раздел 16.19 для корректного метода обработки зомби.