从Bash终端重新启动C程序
我一直在做我的学校项目,几天来我一直坚持这一步。任何形式的帮助都将不胜感激 到目前为止我所尝试的:从Bash终端重新启动C程序,c,linux,bash,application-restart,C,Linux,Bash,Application Restart,我一直在做我的学校项目,几天来我一直坚持这一步。任何形式的帮助都将不胜感激 到目前为止我所尝试的: 编译脚本。它可以正确编译,我可以通过键入./process.o来运行它,但是我不能这样做,当我杀死它时,它会重新启动。我一直在谷歌上搜索和尝试各种各样的东西,但似乎什么都不起作用,它总是会终止进程,但不会重新启动它 kill-SIGKILL(PID) 压井2(PID) 压井1(PID) kill-hup3155 其他各种命令只能杀死它,但似乎没有任何效果。我必须修改代码还是什么?我很困惑 我要
- 编译脚本。它可以正确编译,我可以通过键入./process.o来运行它,但是我不能这样做,当我杀死它时,它会重新启动。我一直在谷歌上搜索和尝试各种各样的东西,但似乎什么都不起作用,它总是会终止进程,但不会重新启动它
- kill-SIGKILL(PID)
- 压井2(PID)
- 压井1(PID)
- kill-hup3155
- 其他各种命令只能杀死它,但似乎没有任何效果。我必须修改代码还是什么?我很困惑李>
process.C
保存它(这样做了)
#包括
#包括
int main(){
printf(“创建后台进程..\n”);
pid_t pid=fork();
如果(pid>0)返回0;/*主机进程结束*/
如果(pid<0)返回-1;/*分叉不起作用*/
while(1){}/*while循环*/
返回0;
}
将以下代码编译到名为process.o
的工作程序中,然后启动该过程。(做了这件事,工作到了这一点)
使用kill
命令重新启动进程.o
(停止进程工作,但不会重新启动它)
您需要保持父进程运行以监视子进程。如果父级检测到子级不再运行,则可以重新启动它 父级可以使用
wait
系统调用来检测子级何时退出
while (1) {
pid_t pid = fork();
if (pid < 0) {
return -1;
} else if (pid > 0) {
// parent waits for child to finish
// when it does, it goes back to the top of the loop and forks again
wait(NULL);
} else {
// child process
while (1);
}
}
while(1){
pid_t pid=fork();
if(pid<0){
返回-1;
}否则,如果(pid>0){
//父项等待子项完成
//当它这样做时,它返回到循环的顶部并再次分叉
等待(空);
}否则{
//子进程
而(1),;
}
}
您确定这正是您必须完成的任务吗?因为这对我来说没什么意义。kill
命令不会重新启动任何东西。同时,对生成的链接二进制文件使用.o
扩展有点奇怪。是的,我也有点困惑。我知道Linux、C/C和Java的基础知识,但这对我来说毫无意义。我不知道我是否应该以某种方式修改代码,但任务是:使用kill命令再次启动process.o。在这种情况下,我认为正确的做法是请您的教授澄清。Unixy系统的另一种方法是:您可以在init
的控制下运行进程,方法是将条目放入/etc/inittab
。然后,如果进程被终止,它将通过init
重新启动。非常感谢您,这解决了我的问题。谢谢!:)@琼斯很高兴我能帮忙。如果你觉得它有用的话,请随意使用。
while (1) {
pid_t pid = fork();
if (pid < 0) {
return -1;
} else if (pid > 0) {
// parent waits for child to finish
// when it does, it goes back to the top of the loop and forks again
wait(NULL);
} else {
// child process
while (1);
}
}