打开然后从bash中杀死子进程

时间:2011-09-15 23:59:20

标签: bash parent-child kill

执行命令然后在一段时间后杀死命令的最佳方法是什么?这就是我所拥有的;它完成了这项工作,但我得到了amp: command not found虽然我不知道放大器为什么会放在那里,但我知道如果没有它,杀戮就行不通。

feh "$output""$ext" &
echo $!
sleep 1
kill -s 9 $!
exit 1

问题是我不知道我正在执行的进程的PID。我可以在执行时指定一个吗?

3 个答案:

答案 0 :(得分:7)

GNU timeout是最近版本的coreutils的一部分,完全符合您的要求。

timeout 1 feh "$output""$ext"

运行feh一秒钟,然后杀死它,如果它还没有结束。

本评论的其余部分涉及您当前的食谱:

您当前使用的食谱使用feh&放入后台。 amp;之后的错误,可能来自一些过于热心的HTML编码器(&是您在HTML中拼写&的方式。)

启动时内核会为每个进程分配一个PID。 $!是最近后台进程的pid的shell变量。

答案 1 :(得分:4)

你不想要“& amp;”你只想要“&”。 &符告诉bash在后台运行该过程。

$!设置为后台进程的pid,否则你的样本应该做你想要的。

答案 2 :(得分:4)

feh "$output""$ext" &
FEHPID=$!
sleep 1
kill -s 9 $FEHPID
exit 1