私のアプリケーションでは、Busybox udhcpd (dhcp サーバー) を起動する必要があります。コードは以下のとおりです。udhcpd が起動して実行されると、プロセス リストに 2 つのバージョンが表示されます。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 クライアント) を開始しますが、プロセス リストにはエントリが 1 つしかありません。誰かが違いを説明できますか?もし私が間違ったことをしているなら、私は何をすべきですか?
質問の理由は、後で udhcpd を停止する必要があり、子の pid (647) と /var/run/udhcpd.pid (648) から読み取った pid の両方の使用を停止する必要があるようです。