2014-12-04 8 views
0

C 프로그램 설정 -> 1) - 하나의 하위 프로세스를 포크 한 다음 해당 forked 프로세스에서 execl을 실행하는 부모 프로세스가 다른 프로그램을 실행합니다. 분기 된 프로그램은 while (1)에 있으므로 항상 실행 중입니다. 2) - 나는 부모 과정에서 waitpid를 했으니 아이가 죽으면 내가 알게 될 것이다. 3) - 이제 부모가 죽으면 어떻게 될까요? 나는 여전히 그 갈래의 과정을 모니터하고 싶다. 그러나 부모가 죽으면 fork 된 프로세스가 init에 의해 소유됩니다. 따라서 init (process id = 1)은 자식 프로세스의 새로운 부모가됩니다. 하지만 몇 가지 이유로 나는 아직도 다른 프로그램을 통해 내 아이 프로세스와 다시 연결하려고합니다. 할 수 있을까요?리눅스의 프로세스에 다시 연결

+0

그것은이 경우 실제로 고아 과정입니다. 그러나 질문은 동일하게 유지됩니다. 고아의 과정에 다시 붙일 수 있을까요? –

+0

새 프로세스에서 다시 waitpid()를 수행하면 어떻게됩니까? 하위 프로세스를 원래 부모 프로세스의 파일로 저장해야합니다. –

+0

나는 똑같이했다. 그 과정의 pid를 저장하고 다시 waitpid. 그러나 불행히도 waitpid는 부모 프로세스에 의해 자식 프로세스에만 호출 될 수 있고 고아 프로세스 init (pid = 1)의 경우에는 부모 프로세스가되어 이제는 waitpid가 오류 메시지를 표시합니다. pid –

답변

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

응답 해 주셔서 감사합니다 –

+0

@utkarshkatiyar 도움이된다면 답을 표시해주세요. – D3Hunter

+0

죄송합니다. 당신의 대답이 나를 도와주지 않습니다. 그러나 오히려 그것은 다른면을 알게 도와주었습니다. 그래서 저는 그것을 답으로 표시 할 것입니다. –

관련 문제