最近,我正在其用于从文件中启动的工作,承担以下任务的脚本:
while true; do nc -l 8188 < index.html; done &
,当我在一个交互式shell中运行它,我得到了一个PID回显这样的:
[1] 31095
的pstree(1)
输出:
的bash(31095,31095)---- NC(31096,31095)
两个while
子句和nc(1)
命令位于同一个进程组中。
- 当我键入
kill 30995
,在while
条款如预期终止,但nc(1)
也没留下。我想那个kill语句只是调用kill(2)
系统调用。 - 当我键入
kill %1
时,整个31095进程组被终止。我可能会在内部调用killpg(2)
。 - 当我输入'fg'将背景放在前面,然后键入'Ctrl-C'发送中断信号,则
while
子句和nc(1)
命令都没有了,我认为这是因为INT
信号已发送到第2项中描述的进程组。
我还下载了bash-4.3-beta源代码,但源代码太多,我找不到相关的东西。有人能帮我明确我的想法吗?
但是,当我把上面的后台作业的脚本,我猜测任何更kill %1
不起作用。这里是脚本(kill2.sh):
while true; do
nc -l 8888 < $0
done &
trap 'kill %1' INT TERM
wait || wait
我通过bash kill2.sh
运行它,然后pstree -pg 31835
结果:
bash(31835, 31835) -- bash(31836, 31835) -- nc(31837, 31835)
当我输入ctrl-c
,31835和31836被打死,但NC是剩下。所以我想知道在脚本上下文中是否存在kill %1
的特殊情况?