作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我的应用程序中,我需要启动 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/
在我的应用程序中,我需要启动 Busybox udhcpd(dhcp 服务器),代码如下。虽然 udhcpd 确实启动并运行,但我在进程列表中得到了两个版本。 udhcpd 运行正常,即为设备分配了
我有一个路由器。它总是显示以下调试消息: killall -q -USR1 udhcpd 谁能向我解释一下这里发生了什么?为什么我会收到这样的错误? 最佳答案 killall 用于按名称终止进程。它向
我是一名优秀的程序员,十分优秀!