我可以启动一个脚本,使其独立于 Linux 上的父进程吗?

发布于 2024-07-19 09:14:40 字数 217 浏览 8 评论 0原文

有没有办法从另一个进程启动脚本,以便如果进程终止/结束,脚本仍然继续?

setuid 会这样做吗? 如果我将所有者设置为root,然后启动脚本呢?

例如,如果我有一些启动脚本的 PHP 代码,但 httpd 死掉或被杀死,我认为它会带走我的脚本。 有没有解决的办法?

具体来说,我使用的是带有 Apache 2 和 PHP 5 的 Fedora 10。

Is there a way to start a script from another process, so that if the process dies/ends, the script still continues?

Will setuid do this? If I were to set the owner to root, and then start the script?

For example, if I have some PHP code starting a script, but httpd dies or gets killed, I think that it takes my script with it. Is there a way around this?

Specifically, I'm on Fedora 10 with Apache 2 and PHP 5.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

帅哥哥的热头脑 2024-07-26 09:14:40

来自此处

function become_daemon() 
{
    $child = pcntl_fork();
    if($child) {
        exit; // kill parent
    }
    posix_setsid(); // become session leader
}

此外,关闭 STDIN 是个好主意、STDOUT 和 STDERR 但我不知道如何在 PHP 中做到这一点。

From here:

function become_daemon() 
{
    $child = pcntl_fork();
    if($child) {
        exit; // kill parent
    }
    posix_setsid(); // become session leader
}

Additionally, it's a good idea to close STDIN, STDOUT, and STDERR but I'm not sure how to do that in PHP.

奢欲 2024-07-26 09:14:40

尝试“nohup yourscript.sh &”

Try "nohup yourscript.sh &"

梦初启 2024-07-26 09:14:40

您应该使用 php 的 pcntl_fork() (如 @bmdhacks 推荐)。

基本过程是,fork、setsid、再次 fork、chdir 到 /,然后关闭所有打开的文件描述符。 标准做法还要求您创建一个名为 /var/run/$NAME 的文件(其中 $NAME 是您的守护程序的名称),并将 PID 写入该文件,以便您可以控制进程稍后执行。

我不是 php 程序员,但这是标准的 *nix 东西。
我可以谷歌搜索的最好的PHP示例如下 hello-world-daemon-with-fork
但是,他没有将工作目录更改为“/”,也没有关闭打开的文件描述符(我不确定这在 php 中如何工作),因此他没有连接到标准输入、标准输出,和原始进程的stderr。

我进一步挖掘,发现另一篇文章可能有助于 php 的 pcntl_fork()

而且,看起来有一个名为 System_Daemon 的 pear 模块,它可以为你处理这个问题(我通过此处找到它)。

You should use php's pcntl_fork() (as recommended by @bmdhacks).

The basics process is, fork, setsid, fork again, chdir to /, and close all your open file descriptors. Standard practice also dictates that you create a file called /var/run/$NAME, (where $NAME is your daemon's name), and write the PID to that file, so that you can control the process execution later on.

I'm not a php programmer, but this is standard *nix stuff.
The best php example I can google looks like this hello-world-daemon-with-fork
But, he doesn't change his working directory to '/', nor does it look like he closed open file descriptors (I'm not sure how this would work in php), so that he's not connected to the stdin, stdout, and stderr of the original process.

I dug a little more, and found another article which may help with php's pcntl_fork()

And, it looks like there's a pear module called System_Daemon, which handles this for you (I found it through here).

时间海 2024-07-26 09:14:40

您可以使用 bash 中的“disown”内置功能将作业与生成它的 shell 分离。 请参阅:http://www.faqs.org/docs/bashman/bashref_79.html< /a>

You can use the "disown" built-in in bash to detach a job from the shell that spawned it. See: http://www.faqs.org/docs/bashman/bashref_79.html

九歌凝 2024-07-26 09:14:40

在命令 shell 中,您可以在命令行末尾附加一个与号 (&),以在后台启动该命令,从而将其与 shell 分离。

这里有一些很好的信息:
http://www.linuxforums。 org/forum/linux-programming-scripting/50096-moving-processes-background-foreground.html

From the command shell you can append an ampersand (&) on the end of your command-line to launch the command in the background, which detaches it from the shell.

Some good info here:
http://www.linuxforums.org/forum/linux-programming-scripting/50096-moving-processes-background-foreground.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文