如何在shell脚本中终止分叉进程?

时间:2012-07-31 15:38:20

标签: linux shell scripting

我正在尝试同时运行几个命令。我通过将每个命令附加到一个看起来像

的命令,在脚本中准备它
and=" & "
command=$command1$and$command2
eval $command

但是,当我运行它时,每个命令都是分叉并正确完成,但它会挂起在命令行,并且永远不会将我返回到提示符。

示例(脚本run.sh)。如果这两个命令是:

command1="echo 'Hello'"
command2="echo 'World'"

然后输出是:

person: ./run.sh
Hello
World
## It Hangs here

而不是

person: ./run.sh
Hello
World
person: 

那么如何终止分叉进程,或者在分叉进程完成之前让脚本阻塞?

3 个答案:

答案 0 :(得分:1)

假设您的示例已经简化(因为'echo'应该立即完成并返回到提示符),您只需要对第二个命令进行后台处理。 IOW,试试:

command="$command1 & $command2 &"

请注意,我已删除了您的“和”变量,因为它只是模糊处理。单个&绝不是and操作。

答案 1 :(得分:0)

你得到这样的输出:

~/dev/other $ echo foo &
[1] 522
~/dev/other $ foo
▯ # blink, blink, blink…

在这种情况下, 被返回到提示符,但提示符出现在echo完成之前,因此要echo的字符串出现在提示,然后换行。您可以在提示后在该新行上编写下一个命令,或者只需点击enter即可获得新提示。

如果在脚本中发生这种情况,您可以将内置wait添加到脚本的末尾,以确保脚本在所有后台子进程完成之前不会返回提示。

答案 2 :(得分:0)

我认为你的命令应该是这样的:

command= $command1$and$command2$and