2016-01-29 68 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