Я провел небольшое исследование и думаю, что небольшое объяснение поможет другим.
Итак, как @Schives ответил, с помощью PPID мы сможем завершить все дочерние и родительские процессы.
Но как легко получить PPID
?
ps -o pid,ppid,sess,cmd -U webmon
или
root@87-109:~$ ps -o pid,ppid,sess,cmd -U webmon | grep 'website_status.sh\|PID'
PID PPID SESS CMD
16848 16787 16787 sh website_status.sh
17667 4405 4405 grep --color=auto website_status.sh\|PID
root@87-109:~$
, затем pkill -15 -P 16787
, где webmon — пользователь, запускающий процесс.
Я нашел другие способы убить родительский и дочерний процессы в блоге, я вставляю их сюда.
Для этого требуются PID,PPID,PGID,GID
и как их получить?
ps -o pid,ppid,pgid,gid,sess,cmd -U username
1. Убить группу процессов с отрицательным PID(Process ID)
kill -TERM -PID
Убить PID и все его дочерние процессы.
2. убить группу процессов с их PGID (идентификатором группы процессов)
kill -- -$PGID Kill using the default signal (TERM = 15)
kill -9 -$PGID Kill using the KILL signal (9)
3. убить группу процессов только с информацией о PID
kill -- -$(ps -o pgid= $PID | grep -o [0-9]*)
На самом деле, вы можете заметить, что это просто способ из # 2
4. Используя pkill, уничтожайте процессы по PGID (идентификатору группы Proess)
pkill -9 -g $PGID
5. Используя pkill, уничтожайте процессы по GID (идентификатору группы)
pkill -9 -G $GID
6. Используя pkill, уничтожайте процессы по PPID (идентификатору родительского процесса)
pkill -9 -p $PPID
7. Используя pkill, уничтожайте процессы терминалом
pkill -9 -t $terminal
Примечание: без префикса /dev/
8. Используя pkill, уничтожайте процессы по имени процесса
pkill -9 -x $process_name
9. Используя pkill, уничтожайте процессы по сеансу
pkill -9 -s $sess
Эффект, свидетелем которого вы стали, вызван тем, что оболочка ожидает еще одной обратной кавычки. Вы получите тот же эффект, если, например, введете (
(или любую другую незавершенную команду) и нажмете Return в командной строке.
Приглашение, > ␣
, вы получили вторичное приглашение , хранящееся в $ PS2
.Это приглашение используется оболочкой, когда для окончательного завершения команды требуется дополнительный интерактивный ввод.
Пример:
bash-4.4$ for i in {0..10..2}
> do
> printf 'Hello %d\n' "$i"
> done
Hello 0
Hello 2
Hello 4
Hello 6
Hello 8
Hello 10
bash-4.4$
bash-4.4 $
- это мое основное приглашение ( $ PS1
), и я получаю вторичное приглашение при нажатии Return после {0..10..2}
в первой строке, поскольку введенная команда не завершена. Я продолжаю получать вторичное приглашение в каждой строке, пока не завершу команду, нажав Return после done
(что завершает ввод цикла for в оболочку).
Третичное приглашение ( $ PS3
, обычно #? ␣
) используется ключевым словом select
, а четвертичное 1 приглашение ( $ PS4
, обычно + ␣
) используется для вывода трассировки, когда опция оболочки xtrace
установить с помощью установить -x
.
1 Да, мне пришлось найти это слово.