0
이것은 내 코드이며, 간단하게 처리했습니다. 아버지 프로세스가 블록을 설정하는 동안 SIGCHLD
#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;
}
나는 그것을 실행
, 나는 아들 프로세스가 실행 결과를 출력하지만, 아버지 과정 이 차단 된 것을 발견했다.아버지가 아들 프로세스가 많은 경우 어떻게해야합니까? 각 1 대에 wait(&status)
을 설정 하시겠습니까?
영어로는 매우 유감 스럽습니다.
'execl()'또는'exec *()'함수의 다른 멤버의 상태. 반환하면 실패했습니다. 성공하면 복귀하지 않습니다. –
['execl'] (http://linux.die.net/man/3/execl)의 매뉴얼 페이지를 더보아야합니다. 호출은'execl ("/ bin/ls", "ls" , "/", NULL); –
서면으로 (일종의) OK입니다. 'ls' 프로그램에 이름이'/'이고'ls'는 파일 이름 인수가 없으므로 현재 디렉토리를 나열합니다. (그러나 당신은 정확합니다; 그것은 아마 의도 한 것이 아닙니다.) –