gpt4 book ai didi

c - Busybox udhcpd vfork 启动两个进程

转载 作者:太空狗 更新时间:2023-10-29 12:42:47 25 4
gpt4 key购买 nike

在我的应用程序中,我需要启动 Busybox udhcpd(dhcp 服务器),代码如下。虽然 udhcpd 确实启动并运行,但我在进程列表中得到了两个版本。 udhcpd 运行正常,即为设备分配了 IP 地址。

pid_t forked_pid = vfork();

if ( forked_pid == 0 )
{
// Child process, execute udhcpd.
execl( "/usr/bin/udhcpd",
"udhcpd",
"/var/run/udhcpd.conf", // the location of the udhcpd config file
NULL );
}
else if ( forked_pid > 0 )
{
// Parent process, record the childs pid
m_udhcpd_pid = forked_pid;
log( Log_Info, "UDHCPD started with PID: %d (PID=%d)", forked_pid, getpid());
}
else
{
log( Log_Warning, "Failed to start UDHCPD" );
}

日志输出

UDHCPD 以 PID 开头:647 (PID=528)

PS输出

528 root       0:03 ./MyApp

647 root 0:00 [udhcpd]

648 root 0:00 udhcpd /var/run/udhcpd.conf

现在,如果我查看/var/run/udhcpd.pid,它的 pid 为 648。在我们代码的另一部分中,我们使用与上面相同的代码启动 dhcpcd(dhcp 客户端),它在进程列表。谁能解释一下区别是什么,如果我做错了我应该做什么?

询问的原因是我需要稍后停止 udhcpd,看来我将需要停止使用 child 的 pid (647) 以及从/var/run/udhcpd.pid (648) 读取的 pid。

最佳答案

我相信答案是 udhcpd 做了另一个 fork,留下了一个僵尸进程。恢复为仅执行系统调用并使用 PID 文件中的 PID 终止进程。

关于c - Busybox udhcpd vfork 启动两个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36177998/

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