Answers:
bash中有一个特殊的变量:
kill $!
$!扩展为在后台执行的最后一个进程的PID。
^Z
不是后台作业,它会阻止它们。随后的对象bg
执行实际的“后台”(在后台继续执行),然后$!
按预期工作。
????
终止后要执行一个或多个命令,如果这些命令中的任何一个依赖于后台进程完成的工作,请注意后台进程在执行完信号处理程序后可能执行的任何清理或整理任务接收(可陷阱)信号。最好在任何此类“相关”命令的第一个之前添加一个wait
(可能紧接着一个sync
,甚至一个sleep <n>
)。
您可以按职位编号杀死。将任务放在后台时,您会看到类似以下内容的内容:
$ ./script &
[1] 35341
那[1]
是工作编号,可以像这样引用:
$ kill %1
$ kill %% # Most recent background job
要查看作业编号列表,请使用jobs
命令。更多来自man bash
:
在Shell中有多种方法可以引用作业。角色
%
介绍了工作名称。作业编号n
可以称为%n
。也可以使用用于启动作业的名称前缀或使用其命令行中出现的子字符串来引用作业。例如,%ce
是指已停止的ce
作业。如果前缀与多个作业匹配,则bash报告错误。%?ce
另一方面,using表示ce
在命令行中包含字符串的任何作业。如果子字符串匹配多个作业,则bash报告错误。符号%%
和%+
引用当前作业的外壳程序概念,即在作业在前台或在后台启动时停止的最后一个作业。可以使用引用以前的作业%-
。在与作业有关的输出中(例如,作业命令的输出),当前作业始终用标记+
,而先前作业则用标记-
。单个%
(无随附的工作说明)也指当前工作。
set -m
)中将其打开,但它仅供交互使用。见stackoverflow.com/questions/690266/...以及
%1
和%%
-特别。有些事情不会在Ctrl-C上消失,因此您需要先按Ctrl-Z,然后再按kill -9 %%
。我发现它有用的一个示例是:while true; do mplayer <some unstable online radio>; date >> restarts.log; done
-Ctrl-C只会使您进入下一个循环迭代。在我不得不做ps
或也许做之前jobs -l
,然后重新输入PID,这很繁琐。
while true
为的原因while sleep 1
。如果可以忍受,这将给您带来短暂的延迟,然后重新启动,并且如果您按两次ctrl-c,第二次将中断睡眠,并以非零退出结束睡眠并退出循环。
这应该杀死所有后台进程:
jobs -p | xargs kill -9
kill -9 %%
要少输入:)
只需使用killall命令:
killall任务名称
有关更多信息和更多高级选项,请键入“ man killall”。
killall python
或killall java
,而在系统中的其他地方运行有用的东西时,它不是很有帮助。