在BusyBox中使用Posix_Spawn启动UDHCPC守护进程

Starting the UDHCPC Daemon with Posix_Spawn in BusyBox.

本文关键字:启动 Spawn UDHCPC 守护 进程 Posix BusyBox      更新时间:2023-10-16

我使用posix_spawn函数从可执行文件"/sbin/udhcpc"运行一个线程,如下所示:

char* argv[] = {(char*)UDHCPC_EXECUTABLE_FILE, (char*)"-s", (char*)UDHCPC_NOTIFIER,
                                                   (char*)"-i", (char*)INTERFACE_NAME,
                                                   (char*)"-p", (char*)UDHCPC_PID,
                                                   NULL};
char* envp[] = {NULL};
int status;
// Start UDHCPC daemon (lock DaemonProcess against concurrent modifications)
{
  CMutex lock(&self->m_ConnectionStatusLock);
  status = posix_spawn(&self->m_DaemonProcess, UDHCPC_EXECUTABLE_FILE, NULL, NULL, argv, envp);
  if (status != 0)
  {
     cout<<"UDHCPC daemon start failed (%s)"<<endl;
  }
}

My Problem is:

当我使用命令行"PS"时,为了查看我的新进程的PID,我看到第一个posix spawn创建了一个udhcpc线程(一个很快消失的僵尸线程),之后创建了一个永久性进程,配置了变量"argv"。

所以,问题是,在变量进程守护进程ID"m_DaemonProcess",我得到僵尸进程的PID。这正常吗?我怎样才能直接得到永久进程的PID ?

请帮助由于

udhcpc客户端应该接受-f--foreground选项,这会导致它不执行自己的fork-exec,这就是为什么您得到临时pid。

您还使用了pidfile选项,因此您也可以读取该内容