我有简单的bash脚本:
(睡5;回音'A';睡100)&
(睡7;回声'B';睡100)&
我希望在第二个流程打印'B'和第一个流程打印'A'后终止这两个流程。 (可能不是回声 - 第一次睡觉后可能是其他标签。)怎么做?
答案 0 :(得分:0)
可能是这样的
( sleep 5; echo 'A'; sleep 100 ) &
export Last=$!
( sleep 7; echo 'B'; kill-9 $Last; sleep 100 ) &
答案 1 :(得分:0)
试试这个:
jobs -p | xargs kill
jobs -p
从此shell窗口打印所有后台作业的进程ID。
xargs
将stdin
上的内容传递给您提供的程序。
kill
向您提供的每个进程ID发送SIGTERM
。
但请注意,这会终止从此shell启动的所有后台作业,而不仅仅是最后两个。
如果您知道要杀死最近启动的X作业,请使用:
jobs -p | tail -n [number of jobs] | xargs kill