Что делает kill -USR1 %1?

Что делает kill -USR1 %1?

У меня есть две команды ниже, и я не знаю, что они делают.

Что делают эти команды?

kill -USR1 %1
kill $(pidof vlc)

решение1

kill -USR1 %1отправляет "пользовательский сигнал № 1" (он же "SIGUSR1") первому фоновому дочернему процессу текущего процесса оболочки. Если этот фоновый процесс установил функцию обработчика сигнала для сигнала USR1, эта функция будет запущена. Если целевой процесс не имеет обработчика сигнала для этого сигнала, целевой процесс завершится.

kill $(pidof vlc)посылает процессу сигнал «завершение» (SIGTERM) vlc.

Давайте рассмотрим полный сценарий, описанный в комментарии к другому ответу:

Пользователь открывает новое окно с оболочкой Unix на своем рабочем столе и запускает две программы следующим образом:
emacs &

Это запустит текстовый редактор Emacs в фоновом режиме, сделав его первым фоновым заданием (%1).

vlc ti2_intro.mp4

Это запустит видеоплеер VLC на переднем плане для воспроизведения ti2_intro.mp4видео.

Во время воспроизведения Videoti2_intro.mp4 пользователь нажимает Ctrl-z в окне оболочки.

Это прерывает дочерний процесс переднего плана, которым является VLC. Это означает, что VLC был временно остановлен, но не завершен. Он находится в приостановленном состоянии. Теперь это процесс %2.

Теперь [она выдает] команду оболочки jobs,

Это позволяет ей увидеть, какие дочерние процессы прикреплены к этому процессу оболочки. Вероятно, он перечисляет emacsкак %1, и vlcкак%2

с последующим:
bg %2

Это возобновит работу VLC в фоновом режиме, так что видео все еще может воспроизводиться, не связывая оболочку, и она может вводить больше команд оболочки во время воспроизведения.

kill -USR1 %1

Это отправляет "пользовательский сигнал 1" в emacs. Emacs позволяет пользователям определять собственные обработчики сигналов, поэтому трудно узнать, что сделал этот сигнал, не зная подробностей ее настройки Emacs. Он часто используется для запуска отладчика в среде программирования Lisp Emacs "elisp".

Чуть позже она дает команду shell [думаю, автор статьи пропустил какую-то команду?] и затем нажимает Ctrl-c.

Неясно, какую команду автор могла здесь пропустить, но я предполагаю, что она запустила команду, которая не завершилась немедленно, а затем использовала Ctrl-c, чтобы выйти из нее.

Вскоре после этого она дает следующие команды в том же окне Shell:
kill $(pidof vlc)

Это убивает (завершает) процесс VLC.

решение2

kill завершает указанный процесс (или посылает сигнал процессу с просьбой завершить себя).

В первом случае процессу передается сигнал с просьбой завершить себя (что он сделает только в том случае, если это было запрограммировано — программа, запрограммированная таким образом, очистит за собой и завершит работу). %1 означает "job1" Job1 — это процесс, работающий в фоновом режиме и связанный с вашим текущим сеансом (см.Что означает убить %1?)

Во втором случае команда находит идентификаторы процессов vlc и завершает их.

Связанный контент