【问题标题】:Linux C code to start another process asynchronouslyLinux C 代码异步启动另一个进程
【发布时间】:2014-03-20 18:42:28
【问题描述】:

我正在寻找在基于 Linux 的系统上使用的 C 代码来异步启动另一个进程。即使第一个过程结束,第二个过程也应该继续。我查看了“fork”、“system”和“exec”选项,但没有看到任何会产生不与原始进程通信的对等进程或原始进程的子进程。

这个可以吗?

【问题讨论】:

标签: c linux fork spawn


【解决方案1】:

当然可以。在父 fork() 一个孩子中,在该孩子中首先调用 daemon()(这是避免 setsid 等的简单方法),然后从 exec 家庭中调用一些东西。

【讨论】:

    【解决方案2】:

    在 Linux(和 Unix)中,每个进程都是由现有进程创建的。您可以使用fork 创建一个进程,然后终止父进程。这样,孩子将成为一个孤儿,但它仍然被init收养。如果你想创建一个不被别人继承的进程,恐怕是不可能的。

    【讨论】:

    • 本着与行话保持一致的精神,希望保留原来的父母孩子,同时让孩子拥抱他的新养父母init 双叉执行模型。
    【解决方案3】:

    你做了一个 fork (man 2 fork) 然后是一个 execl (man 2 execl)

    For 创建一个与调用进程具有相同映像的新进程(因此是完美的双胞胎),其中 execl 将其中一个双胞胎替换为新映像。

    如果你在谷歌上搜索“fork execl”,你会发现很多教科书的例子——包括how to use correctly fork() and exec()

    最常见的 fork-execl 您仍然将新进程关联到终端 - 要创建完美的后台进程,您需要创建所谓的守护进程 - 可以在这个答案中找到模板这里Creating a daemon in Linux

    【讨论】:

    • 感谢您的解决方案。我在想 fork execl 会创建一个子进程,当父进程死时它会死掉,但现在意识到它变成了一个孤儿并继续滚动。我实际上希望该进程继续连接到控制台而不是作为守护进程。效果很好!
    • @Gatnus 解决问题的最佳方法是投票并“接受”您找到的最能描述问题解决方案的答案:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    相关资源
    最近更新 更多