2014-12-04 81 views
0

我下面的C程序設置 - > 1) - 我的父進程分叉了一個子進程,然後execl在分叉進程運行另一個程序。分叉程序在while(1)中,所以它始終運行。 2) - 我在父母的過程中完成了waitpid,所以如果孩子死了,我會知道的。 3) - 現在如果父母自己死了呢?我仍然想要監視那個分叉進程。但是,當我的父母死於分叉進程屬於init的時候。所以init(進程id = 1)成爲子進程的新父進程。但出於某些原因,我仍然希望通過其他程序重新與我的子進程重新連接。我可以做嗎?重新連接到Linux中的進程

+0

它實際上在這種情況下,一個孤兒進程。但問題依然如此。我可以再次附上那個孤兒過程嗎? – 2014-12-04 18:36:02

+0

如果您在新進程中再次執行waitpid(),會發生什麼情況?您必須將子pid保存到原始父進程中的文件中。 – 2014-12-04 18:56:35

+0

我也這樣做過。存儲該進程的pid,並再次waitpid。但不幸的是,它也不起作用,因爲waitpid只能通過它的父進程調用子進程,而在孤兒進程的情況下init(pid = 1)已成爲父進程,所以現在waitpid會拋出一個錯誤 - pid – 2014-12-04 19:01:16

回答

0

您可以使用ptracePTRACE_ATTACH,然後您可以爲該過程執行waitpid。請查詢man ptracethis瞭解更多信息。

下面是ptrace的手冊頁的:

The ptrace() system call provides a means by which one process (the "tracer") may observe and control the execution of another process (the 
     "tracee"), and examine and change the tracee's memory and registers. It is primarily used to implement breakpoint debugging and system 
     call tracing. 
...... 
    PTRACE_ATTACH 
      Attach to the process specified in pid, making it a tracee of the calling process. The tracee is sent a SIGSTOP, but will not nec‐ 
      essarily have stopped by the completion of this call; use waitpid(2) to wait for the tracee to stop. See the "Attaching and detach‐ 
      ing" subsection for additional information. (addr and data are ignored.) 
+0

感謝您回答 – 2014-12-08 06:28:34

+0

@utkarshkatiyar如果有幫助,請標記爲答案。 – D3Hunter 2014-12-08 13:27:07

+0

對不起。你的回答對我沒有幫助。但是,它幫助我瞭解了另一個方面,因此我將其標記爲答案。 – 2014-12-10 05:21:58