gpt4 book ai didi

c++ - posix_spawn 创建一个僵尸进程并返回成功

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

我正在尝试使用 posix_spawn() 生成一个子进程.我给出了可执行文件名称(存在)但是 posix_spawn()创建一个僵尸进程(我在 ps 中搜索该进程,它显示为 <defunct> )。即使我指定了一个不存在的可执行文件名称,也会创建僵尸进程。

我的问题是我需要知道进程是否成功生成,但是因为 posix_spawn返回 0(成功)并且子进程的 ID 有效,我无法收到发生错误的通知。

这是我的代码(P.S. 可执行文件“dummy”不存在):

#include <iostream>
#include <spawn.h>

extern char **environ;

int main()
{
const char *args[] = { "dummy", nullptr };

pid_t pid = 0;

posix_spawn(&pid, "dummy", nullptr, nullptr, const_cast<char **>(args), environ);
if (pid == 0)
{
// doesn't get here
}
else
// this gets executed instead, pid has some value
std::cout << pid << std::endl;
}

获取状态:

#include <iostream>
#include <spawn.h>

extern char **environ;

int main()
{
const char *args[] = { "dummy", nullptr };

int status = posix_spawn(nullptr, "dummy", nullptr, nullptr, const_cast<char **>(args), environ);
if (status != 0)
{
// doesn't get here
}
else
// this gets executed, status is 0
std::cout << status << std::endl;
}

最佳答案

作为僵尸的子进程意味着它已完成/死亡,您需要使用 wait/waitpid 获取其退出状态。

#include <sys/wait.h>
//...
int wstatus;
waitpid(pid,&wstatus,0);

关于c++ - posix_spawn 创建一个僵尸进程并返回成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54539494/

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