【发布时间】:2012-05-31 05:49:07
【问题描述】:
这是我的代码,我已经简化了。
#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)?
我很抱歉我的英语不好!
【问题讨论】:
-
您不需要测试
execl()或exec*()函数的任何其他成员的状态。如果返回,则失败;如果成功,则不会返回。 -
你应该多看
execl的手册页,电话应该是execl("/bin/ls", "ls", "/", NULL);。 -
写的(有点)没问题;它告诉
ls程序它的名字是/并且ls列出了当前目录,因为它没有文件名参数。 (但你是对的;这可能不是本意。)
标签: c linux process signals fork