【发布时间】:2015-05-04 14:31:45
【问题描述】:
我正在使用execv 启动一个进程并让它写入文件。我同时启动一个线程来监视文件,以便它的大小不超过使用stat.st_size 的特定限制。现在,当达到限制时,我为子进程waitpid,但这会引发错误,并且我在后台启动的进程变成了僵尸。当我在主线程中使用相同的waitpid 停止时,进程被杀死而不会变成僵尸。有什么想法吗?
编辑:errno 是 10,waitpid 返回 -1。这是在 linux 平台上的。
【问题讨论】:
-
"但是这会引发一个错误......" 那个错误会是......什么?在您发布的问题中包含错误代码和所有相关消息逐字。也可以包括平台信息。
-
waitpid 返回 -1,errno 设置为 10。errno 似乎表明子进程不存在。但情况似乎并非如此,因为我可以用 ps ax 看到这个过程。操作系统是 linux。
-
这将在 comment 中。该信息属于您发布的问题。无论如何,“Linux 笔记”in the documentation of
waitpid部分可能是相关的。 -
感谢您指出这一点。因此,如果我使用选项 _WALL,我应该能够等待由主线程创建的子进程。我编辑了问题以包含错误信息。
-
快速查看 /usr/include/asm-generic/errno-base.h 显示 10 是 ECHILD(无子进程)。 (您可以使用 strerror_r(3) 将 errno 转换为字符串)。查看 waitpid(2) 手册页了解更多信息。
标签: c linux process pthreads waitpid