我对通过使用百分号和kill命令来停止作业感到困惑。我在kill 的手册页中找不到任何表明可以使用百分号的文档。有人可以向我解释一下这个解释是否隐藏在其他地方,或者为什么%
使用这个标志?
kill -s 19 %1
将停止 id 为 1 的作业
答案1
该%
标志介绍了一个工作规范。简单来说,作业就是一个已经由 shell 启动的进程,可以在前台运行(如果是的话,那么就无法与 shell 交互)、在后台运行、暂停、或者已经死亡(但外壳还没有注意到,否则工作就会消失)。
%1
表示该 shell 作业表中第一个条目的作业。不同shell实例中的作业号是不相关的,并且它们与进程ID无关。您可以使用该jobs
命令查看该 shell 中的作业列表。操作作业的其他有用命令是fg
和bg
,分别将作业移动到前台或后台。其他操作作业的方法是按Ctrl+Z暂停前台作业并在&
末尾运行命令将其直接发送到后台。
有一个独立的kill
实用程序,还有一个 shell 内置命令,称为kill
。该命令作为单独的实用程序存在,因此可以从其他程序调用它而无需启动 shell。该命令作为 shell 内置命令存在,因此即使没有足够的资源来启动进程也可以调用它kill
,并且它可以理解 shell 内部数据结构。
作业是内部 shell 数据结构,因此外部kill
命令不知道它们。手册页记录了外部命令。要查找有关kill
与作业相关的功能的文档,请查看 shell 的文档,例如巴什或者桀骜。然后参考关于职位的部分:巴什,桀骜。 shell 手册还记录了命令jobs
、fg
和bg
。
答案2
有多种方法可以在 shell 中引用作业。字符 % 引入了工作规范 (jobspec)。作业编号 n 可以称为 %n。还可以使用用于启动作业的名称的前缀或使用出现在其命令行中的子字符串来引用作业。只需命名一个作业即可将其带入前台:%1 是“fg %1”的同义词,将作业 1 从后台带入前台。同样,“%1 &”在后台恢复作业 1,相当于“bg %1”。
答案3
[root@typhoon ~]# jobs
[3]+ Stopped sleep 3000
[5]- Stopped sleep 1001
[6] Running sleep 9922 &
[root@typhoon ~]# /bin/kill %5
kill: cannot find process "%5"
[root@typhoon ~]# kill %5
[root@typhoon ~]#