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列为%1vlc以及%2

其次是:
bg %2

这会在后台恢复 VLC,以便视频仍可播放,而无需占用 shell,因此她可以在播放时发出更多 shell 命令。

kill -USR1 %1

这会将“用户定义信号 1”发送到emacs。Emacs 允许用户定义自己的信号处理程序,因此如果不知道 Emacs 设置的详细信息,就很难知道此信号的作用。它通常用于触发 Emacs“elisp”Lisp 编程环境中的调试器。

过了一会儿,她给出了 shell 命令 [我认为 OP 这里漏掉了一个命令?] 然后按下 Ctrl-c。

目前尚不清楚 OP 可能在这里遗漏了什么命令,但我猜她运行了一个没有立即退出的命令,然后使用 Ctrl-c 退出它。

此后不久,她在同一个 Shell 窗口中输入以下命令:
kill $(pidof vlc)

这将终止 VLC 进程。

答案2

kill 终止列出的进程(或向该进程发送信号要求其终止自身)。

在第一种情况下,会向进程发送一个信号,要求它终止自身(只有在经过编码后,它才会执行此操作 - 这样编码的程序将自行清理并退出)。 %1 表示“job1”,Job1 是一个在后台运行并与当前会话关联的进程(请参阅kill %1 是什么意思

在第二种情况下,该命令查找 vlc 的进程 ID 并终止它们。

相关内容