从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
  • 其他各种命令只能杀死它,但似乎没有任何效果。我必须修改代码还是什么?我很困惑
我要做的是:

用C创建一个新文件。用名称
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);
    }
}