これは私のコードです。単純化しました。
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
void signal_handle(int sig)
{
int status;
wait(&status);
}
int main()
{
pid_t pid = fork();
if (pid > 0)
signal(SIGCHLD, signal_handle);
if (pid == 0) {
if (execl("/bin/ls", "/", (char *)0) < 0)
{
perror("execl");
return -1;
}
}
return 0;
}
実行すると、息子プロセスは実行結果を出力しますが、父親プロセスはブロックされていることがわかりました。
父親に息子の手続きが多い場合はどうすればいいですか?wait(&status)
ごとに設定されていますか?
下手な英語で本当にごめんなさい!