Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从c+启动服务+;与execv 我试图从C++启动一个Linux服务,我成功地完成了它,但是我的一个进程被标记为“失效”,我不希望我的父进程死亡。_C++_Linux_Service_Daemon_Execv - Fatal编程技术网

从c+启动服务+;与execv 我试图从C++启动一个Linux服务,我成功地完成了它,但是我的一个进程被标记为“失效”,我不希望我的父进程死亡。

从c+启动服务+;与execv 我试图从C++启动一个Linux服务,我成功地完成了它,但是我的一个进程被标记为“失效”,我不希望我的父进程死亡。,c++,linux,service,daemon,execv,C++,Linux,Service,Daemon,Execv,我的代码是(testRip.cpp): ps-e命令的退出是: 9411 pts/1 00:00:00 testRip 9412 pts/1 00:00:00 testRip <defunct> 9433 ? 00:00:00 zebra 9411 pts/1 00:00:00 testRip 9412分/1 00:00:00测试记录 9433 ? 00:00:00斑马 etc/init.d/zebra以守护进程或类似的方式启动服务,因此我

我的代码是(testRip.cpp):

ps-e命令的退出是:

9411 pts/1    00:00:00 testRip
9412 pts/1    00:00:00 testRip <defunct>
9433 ?        00:00:00 zebra
9411 pts/1 00:00:00 testRip
9412分/1 00:00:00测试记录
9433 ?        00:00:00斑马
etc/init.d/zebra以守护进程或类似的方式启动服务,因此我认为这是一个技巧,但是:

为什么有3个进程,其中一个进程被标记为已失效? 我的代码有什么问题? 我怎样才能修好它


提前感谢。

要删除僵尸,父进程必须等待其子进程,否则将死亡。如果您需要创建一个非阻塞的
wait()
请查看带有
W_NOHANG
标志的
waitpid()

在Unix和Linux中,正确地分叉守护进程是很困难的,因为有很多细节需要处理,而且顺序也很重要。在这种情况下,我会怀疑是打开的文件描述符和不去跟踪控制终端的组合


我强烈建议使用另一个程序中经过良好调试的实现—一个功能较低的命令行shell(如rsh或ksh)可能是一个不错的选择,而不是尝试烘焙您自己的版本。

Fork两次:,谢谢您的回复,但不幸的是,由于合同问题,我需要实现自己的版本。我将使用“系统”调用启动服务,因为我始终是root用户,我将尝试用WIFSIGNALED、WTERMSIG和WTERMSIG捕获系统错误。也有公共域shell:“pdksh”我认为是其中之一:我预计它们将不受任何法律约束。你不需要复制代码,但是检查代码会很有建设性。嗨,Jean Baptiste,我不能使用wait或waitpid,因为进程的PID无效,这些进程是僵尸,所以它们已经完成了,它们的PID不存在。进程在某个点上有一个PID——即使只是短暂的——而它变成僵尸的原因之一是它没有父进程(以及其他一些东西)。否则设置为ok但没有父进程的进程的默认行为是“init”拥有所有权,这样它就不会变成僵尸。没有僵尸有PID!这正是它们存在的原因,它们只是它们过去存在的简单痕迹。无论如何,如果您不知道PID(因为您忘记了它),那么您可以使用
wait(NULL)进行“匿名”等待
9411 pts/1    00:00:00 testRip
9412 pts/1    00:00:00 testRip <defunct>
9433 ?        00:00:00 zebra