Каков эффект одиночного обратного апострофа в конце командной строки?

Я провел небольшое исследование и думаю, что небольшое объяснение поможет другим.

Итак, как @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

0
01.10.2015, 01:20
1 ответ

Эффект, свидетелем которого вы стали, вызван тем, что оболочка ожидает еще одной обратной кавычки. Вы получите тот же эффект, если, например, введете ( (или любую другую незавершенную команду) и нажмете 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 Да, мне пришлось найти это слово.

3
28.01.2020, 02:17

Теги

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