2014-12-04 3 views
0

У меня есть настройка программы C -> 1) - Мой родительский процесс, который разветвил один дочерний процесс, а затем выполнил в этом разветвленном процессе запуск другой программы. Вредоносная программа находится в то время как (1), поэтому она всегда работает. 2). Я сделал waitpid в своем родительском процессе, чтобы, если ребенок умрет, я узнаю об этом. 3) - А что, если сам родитель умирает? Я все еще хочу контролировать этот разветвленный процесс. Однако, когда мой родитель умирает, этот разветвленный процесс принадлежит init. Таким образом, init (process id = 1) становится новым родителем дочернего процесса. Но по некоторым причинам я все еще хочу снова подключиться к моему дочернему процессу через какую-то другую программу. Могу ли я это сделать?Повторное подключение к процессам в Linux

+0

Это на самом деле процесс сиротой в этом случае. Но вопрос остается тем же. Могу ли я снова присоединиться к этому сиротскому процессу? –

+0

Что произойдет, если вы снова запустите waitpid() в новом процессе? Вы должны сохранить дочерний pid в файл в исходном родительском процессе. –

+0

Я сделал то же самое. Сохранял pid этого процесса и снова остыл на этом. Но, к сожалению, это тоже не работает, потому что waitpid может быть вызван только для дочерних процессов его родителем, а в случае сиротского процесса init (pid = 1) стал родителем, поэтому теперь waitpid выдает сообщение об ошибке: никакой ребенок с этим pid –

ответ

0

Вы можете использовать ptrace с PTRACE_ATTACH, тогда вы можете сделать waitpid для этого процесса. Пожалуйста, проверьте man ptrace и this для получения дополнительной информации.

Ниже от страницы руководства по 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

извините. Ваш ответ мне не помогает. Но, скорее, это помогло мне узнать еще один аспект, поэтому я буду отмечать его как ответ. –

Смежные вопросы