Kill -USR1 %1 的作用是什麼?

Kill -USR1 %1 的作用是什麼?

我下面有兩個命令,我不知道它們在做什麼。

這些命令分別扮演什麼角色?

kill -USR1 %1
kill $(pidof vlc)

答案1

kill -USR1 %1發送「使用者定義訊號#1」(又稱「SIGUSR1」)到目前 shell 進程的第一個後台子進程。如果該後台程序已為 USR1 訊號設定了訊號處理函數,則該函數將運行。如果目標行程沒有該訊號的訊號處理程序,則目標行程將終止。

kill $(pidof vlc)向進程發送「終止」(SIGTERM) 訊號vlc

讓我們來看看另一個答案的評論中描述的完整場景OP:

使用者在桌面上打開一個帶有 Unix shell 的新窗口,並啟動兩個程序,如下所示:
emacs &

這將在背景啟動 Emacs 文字編輯器,使其成為第一個背景作業 (%1)。

vlc ti2_intro.mp4

這將在前台啟動 VLC 視訊播放器來播放視訊ti2_intro.mp4

在播放 Videoti2_intro.mp4 時,使用者在 shell 視窗中按 Ctrl-z。

這會中斷前台子程序,即 VLC。這意味著 VLC 已暫時停止,但並未終止。它處於暫停狀態。現在是過程%2

現在[她發出] shell 指令jobs

這讓她可以看到哪些子進程附加到該 shell 進程。它可能列出emacs%1vlcas%2

其次是:
bg %2

這會在背景恢復 VLC,以便影片仍然可以播放,而無需佔用 shell,因此她可以在播放時發出更多 shell 命令。

kill -USR1 %1

這會將「使用者定義的訊號 1」傳送至emacs。 Emacs 允許使用者定義自己的訊號處理程序,因此如果不了解 Emacs 設定的詳細信息,就很難知道該訊號的作用。它通常用於在 Emacs“elisp”Lisp 程式環境中觸發偵錯器。

過了一會兒,她給了 shell 指令 [我認為 OP 在這裡遺漏了一個指令?

目前還不清楚 OP 可能在這裡遺漏了什麼命令,但我猜她運行了一個沒有立即退出的命令,然後使用 Ctrl-c 退出它。

此後不久,她在同一個 Shell 視窗中發出以下命令:
kill $(pidof vlc)

這會終止(終止)VLC 進程。

答案2

Kill 終止列出的進程(或向進程發送訊號要求其終止自身)。

在第一種情況下,會向進程發送一個訊號,要求其終止自身(只有在已對其進行編碼的情況下才會執行此操作 - 如此編碼的程式將自行清理並退出)。 %1 表示「job1」 Job1 是一個在背景執行並與目前會話關聯的進程(請參閱殺死%1是什麼意思

在第二種情況下,該指令會尋找 vlc 的進程 ID 並終止它們。

相關內容