gpt4 book ai didi

C: Exec/fork > 失效进程

转载 作者:太空狗 更新时间:2023-10-29 16:37:15 26 4
gpt4 key购买 nike

我想使用 fork > exec 过程创建很多子进程。许多进程结束得非常快(不到两分钟,有些甚至更早)。

我的第一个问题是,我将 spawn 进程置于后台

./spawnbot > logging.txt
[CTRL+Z]
bg 1
disown

到目前为止一切顺利。现在我再也看不到任何 spawnbot 的消息,它们直接进入 logging.txt。但是,每当创建一个新的 child 时,我都会再次在我的控制台中看到关于那个 child 的所有信息。我现在想用它自己的管道启动每个 child - 有没有更好的方法不让 child 在整个过程中发布他们的输出消息安慰?我应该将它重定向到/dev/null 还是用 C 中的一些标志完成?

其次,并不是所有的 child 都真的被杀了。我的 ps -ef 中有很多进程。我该怎么办?我该怎么办

最佳答案

首先你的第二个问题!

您的 child 处于“僵尸”模式,因为内核认为您可能仍想从他们那里检索返回值。

如果您无意从您的子进程获取返回值,您应该将父进程中的 SIGCHLD 信号处理程序设置为 SIG_IGN 以使内核自动获取您的子进程。

signal(SIGCHLD, SIG_IGN);

第一个问题取决于您的实现..

但一般来说,在 fork() 之后,您应该使用 close() 关闭 0 和 1 的旧文件描述符,然后使用 dup2() 来将它们设置为您想要的值。.现在没有时间举个例子,但希望这能将您推向正确的方向..

关于C: Exec/fork > 失效进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6718272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com