在后台启动linux进程


10

我正在尝试创建一个启动某些程序的脚本

startup.sh

knetworkmanager
emesene
keepassx

问题是,当我运行脚本时,它只启动knetworkmanager。这是因为它会启动它,然后等到它完成。如何在不等待的情况下启动程序?我不认为我可以在每个命令后添加“&”,因为脚本完成后所有进程仍将被终止。

Answers:


14

当运行脚本的shell退出时,它会向您启动的进程发送HUP信号。如果那些没有发现信号,他们将终止。因此,仅仅使用&是否足够取决于应用程序。为了安全起见,请使用nohup:

nohup your-program >>/dev/null 2>>/dev/null &

有关更多详细信息,请参阅nohup和kill的手册页,或阅读有关nohup维基百科文章


再次阅读,OP是否退出调用shell是不明确的。他只提到退出脚本,而不退出shell或终端。
Adam Bellaire

再次阅读我的回答,你会注意到我确实说过“当运行脚本的shell退出时”。假设这个shell有自己的虚拟终端(不是子shell或其他东西),这是正确的。

@Kim:那是真的。你的答案很好,我只是确定OP是否正在关闭调用shell。
Adam Bellaire

10

不,如果您使用脚本,则不应该终止进程&。试试吧。

knetworkmanager &
emesene &
keepassx &

2

根据您提供的示例程序,看起来您正在尝试在KDE启动时启动某些程序。如果是这样,请查看KDE的自动启动功能。本文讨论更多内容并提供有关如何将程序添加到自动启动的说明。


的确,这就是我想要做的。我现在修好了,谢谢。
Bart van Heukelom

1

正如其他人所说,使用&运算符在shell运行时将命令放入后台。

如果您希望组件按顺序运行(而不是简单地),但仍希望整个后台运行,请使用如下子shell:

(knetworkmanager; emesene; keepassx) &

或者,如果您希望每个部分的操作都以成功完成前一部分的方式使用:

(knetworkmanager && emesene && keepassx) &

0

在每个命令之后添加'&'肯定会起作用。这意味着即使在startup.sh完成后,这些脚本或程序仍将继续运行。


0

另一种选择是使用/ sbin / start-stop-daemon将进程作为守护进程启动

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.