gpt4 book ai didi

c++ - 使用 execv 从 C++ 启动服务

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:14 24 4
gpt4 key购买 nike

我正在尝试从 C++ 启动一个 Linux 服务,我成功地做到了,但是我的一个进程被标记为“defunct”,我不希望我的父进程死掉。

我的代码是(testRip.cpp):

int main()
{
char* zebraArg[2];
zebraArg[0] = (char *)"zebra";
zebraArg[1] = (char *)"restart";

char* ripdArg[2];
ripdArg[0] = (char *)"ripd";
ripdArg[1] = (char *)"restart";

pid_t ripPid;
pid_t zebraPid;

zebraPid = fork();
if(zebraPid == 0)
{
int32_t iExecvRes = 0;
iExecvRes = execv("/etc/init.d/zebra", zebraArg);
return 0;

if(iExecvRes == -1)
{
::syslog((LOG_LOCAL0 | LOG_ERR),
"zebra process failed \n");
}
}
else
{
while(1)
{
::syslog((LOG_LOCAL0 | LOG_ERR),
"running\n");
sleep(2);
}
}
}

ps -e命令的退出是:

9411 pts/1    00:00:00 testRip
9412 pts/1 00:00:00 testRip <defunct>
9433 ? 00:00:00 zebra

/etc/init.d/zebra 将服务作为守护进程或类似的东西启动,所以我认为这是诀窍但是:

为什么有 3 个进程,其中一个被标记为 defunct?我的代码有什么问题?我该如何解决?

提前致谢。

最佳答案

要移除僵尸,父进程必须 wait() 其子进程或死亡。如果你需要做一个非阻塞的 wait() 看一下带有 W_NOHANG 标志的 waitpid()

关于c++ - 使用 execv 从 C++ 启动服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23521274/

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