Я использую функцию 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;
}
}
Моя проблема заключается в следующем:
Когда я использую командную строку «PS», чтобы увидеть PID моего нового процесса, я вижу, что первое порождение posix создает поток udhcpc (поток зомби, который исчез очень быстро), и после этого постоянный процесс с конфигурацией переменной «argv».
Итак, проблема в том, что в переменной Process Deamon ID «m_DaemonProcess» я получаю PID процесса зомби.
это нормально?
Как я могу получить непосредственно PID постоянного процесса?
пожалуйста помоги
Спасибо
udhcpc
клиент должен принять -f
или же --foreground
опция, которая заставляет его не выполнять свой собственный fork-exec, поэтому вы получаете временный pid.
Вы также используете опцию pidfile, чтобы вы могли читать и этот контент.