通过bash在linux中生成一个完全独立的进程

时间:2010-04-28 17:02:05

标签: php linux perl bash scripting

我需要一个脚本执行(bash或perl或php,任何会做)另一个命令然后退出,而另一个命令仍然运行并自行退出。我可以通过命令安排,但是如果有一个更简单的方法,我很好奇。

7 个答案:

答案 0 :(得分:24)

#!/bin/sh

your_cmd &

echo "started your_cmd, now exiting!"

perl和php存在类似的结构,但在sh / bash中,很容易在后台运行另一个命令并继续。

修改

通用流程操作的一个非常好的来源是/etc/init.d下的所有启动脚本。他们做各种巧妙的技巧,如跟踪pid,执行基本的启动/停止/重启命令等。

答案 1 :(得分:14)

要在后台运行命令,您可以追加'&'命令。

如果您需要程序超过登录会话,可以使用nohup

请参阅此类似的stackoverflow讨论:how to run a command in the background ...

答案 2 :(得分:5)

运行命令并让它在注销时继续运行的常用方法是使用nohup(1)nohup阻止给定命令在shell退出时接收HUP信号。您还需要使用&符号(&)命令后缀在后台运行。

$ nohup some_command arg1 arg2 &

答案 3 :(得分:4)

&

    #!/usr/bin/bash
    # command1.sh: execute command2.sh and exit
    command2.sh &

答案 4 :(得分:4)

我不完全确定这是否是您正在寻找的内容,但您可以通过将&符号(&)符号作为命令的最后一个字符附加在shell中执行的处理。

所以如果你有脚本,a.sh

和a.sh需要生成一个单独的进程,比如执行脚本b.sh,你要:

b.sh &

答案 5 :(得分:3)

只要你提到Perl:

fork || exec "ls";

......其中“ls”是任何东西。重复您需要启动的任意数量的命令。

答案 6 :(得分:0)

大多数答案显示正确..

mycmd &

camh 的回答更进一步,使用 nohup 使其保持活力。

更进一步的高级主题...

mycmd1 & 
mycmd2 &
mycmd3 &
wait

"wait" 将阻塞处理,直到后台任务全部完成。如果响应时间很长,例如系统外数据收集,这会很有用。如果您确定它们完成,这会有所帮助。

我如何随后将进程置于前台? 如果您打算在后续登录时将进程置于前台,请查看 screen 或 tmux。

screen -dmS MVS ./mvs

或(Minecraft 示例)。

screen -dm java -Xmx4096M -Xms1024M -jar server.jar nogui

您可以在后续登录时重新连接到终端。

screen -r

启动这些的登录不需要是交互式的,您可以远程使用 ssh(plink、Ansible 等)以“驱动”方式生成这些。