C 如何将fork作为后台进程运行?
我正在制作一个简单的shell,我需要能够运行一个命令,比如C 如何将fork作为后台进程运行?,c,fork,parent-child,background-process,child-process,C,Fork,Parent Child,Background Process,Child Process,我正在制作一个简单的shell,我需要能够运行一个命令,比如sleep5&。&告诉它作为后台进程运行,这样我就可以在子进程在后台“休眠”时输入其他命令,例如cd someDirectory 我已经对它进行了设置,以便它能够正确地分叉,但是如何设置它,以便在给定&时,它能够在后台运行子级 我对WNHONANG做了很多研究,并做了waitpid(pid,&status,WNHONANG)之类的事情,但这使得它毫无用处 这是我的密码: int executeCommand(char **args){
sleep5&
。&
告诉它作为后台进程运行,这样我就可以在子进程在后台“休眠”时输入其他命令,例如cd someDirectory
我已经对它进行了设置,以便它能够正确地分叉,但是如何设置它,以便在给定&
时,它能够在后台运行子级
我对WNHONANG
做了很多研究,并做了waitpid(pid,&status,WNHONANG)
之类的事情,但这使得它毫无用处
这是我的密码:
int executeCommand(char **args){
pid_t pid;
int status;
pid = fork();
//error in fork
if(pid < 0){
printf("Fork Failed\n");
exit(1);
}
//child process
if(pid == 0){
//child executes process
execvp(args[0], args);
//if execution fails
exit(1);
}
//parent process
else{
waitpid(pid, &status, 0);
}
//Do I need this?
kill(pid, SIGKILL);
return 1;
}
int executeCommand(字符**args){
pid_t pid;
智力状态;
pid=fork();
//叉子错误
if(pid<0){
printf(“Fork失败\n”);
出口(1);
}
//子进程
如果(pid==0){
//子进程执行进程
execvp(args[0],args);
//如果执行失败
出口(1);
}
//父进程
否则{
waitpid(pid和status,0);
}
//我需要这个吗?
kill(pid,SIGKILL);
返回1;
}
不要调用waitpid
。前景和背景是shell概念,而不是fork
的固有工作方式。如果在允许下一个命令之前不“等待”子进程退出,那么根据定义,这意味着它正在后台运行。也不要终止进程;)那么,我是否可以去掉最后的else
语句?然后只需检查子进程是否完成?您可能希望使else
以命令需要是背景还是前景为条件。然后是的,后台进程有不同的代码来获取任何退出的子进程-这是一个不同的主题,建议您研究如何这样做,并在需要时提出一个新问题。请注意,您需要每隔一段时间使用WNOHANG等待子进程,以防止shell收集僵尸。除了后台处理之外,您还需要仔细考虑如何处理收获(等待)的孩子。