2016-01-29 38 views
-1

我一直在研究我的学校项目,现在我一直在这一步停留了几天。任何形式的帮助将不胜感激!  从Bash终端重新启动C程序

我试过到目前为止:  

  • 编译脚本。它编译正确,我可以通过键入./process.o来运行它,但是当我杀死它时,它不能这么做,它会重新启动。我一直在使用谷歌搜索和尝试各种事情,但似乎没有任何工作,它总是杀死进程,但不重新启动它。
  • 杀-SIGKILL(PID)
  • 杀2(PID)
  • 杀1(PID)
  • 杀-HUP 3155
  • 各种其他命令,只有杀了它,似乎没有任何工作。我必须修改代码或其他东西吗?我深感困惑。  

这是我必须做的:

请与C.一个新的文件名称为process.c(这篇)

#include <stdio.h> 
#include <unistd.h> 

int main() { 
    printf("Creating a background process..\n"); 
    pid_t pid = fork(); 

    if (pid > 0) return 0; /* Host process ends */ 
    if (pid < 0) return -1; /* Forking didn't work */ 

    while(1) { } /* While loop */ 
    return 0; 
} 

保存它下面的代码编译,以工作程序称为process.o并启动该过程。 (这样做,工作到了这一点)

使用kill命令,重新启动process.o(杀死进程的工作,但它不会重新启动它)

+1

您确定这完全是您必须完成的任务吗?因为它对我没有多大意义。 'kill'命令不会重启任何东西。 – kirelagin

+1

对于生成的_linked binary_也使用'.o'扩展名是很奇怪的。 – kirelagin

+0

是的,我有点困惑。我知道Linux和C/C#和Java的基础知识,但这对我没有任何意义。我不知道是否应该以某种方式修改代码,但其任务是:使用kill命令再次启动process.o。 – Jones

回答

5

你需要保持父进程运行监视子进程。如果父母检测到孩子不再运行,它可以重新启动它。

父母可以使用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); 
    } 
} 
+0

我不能够感谢你,这解决了我的问题。谢谢! :) – Jones

+0

@Jones很高兴我能帮上忙。如果您觉得它有用,请随时[接受此答案](http://stackoverflow.com/help/accepted-answer)。 – dbush