У меня есть настройка программы C -> 1) - Мой родительский процесс, который разветвил один дочерний процесс, а затем выполнил в этом разветвленном процессе запуск другой программы. Вредоносная программа находится в то время как (1), поэтому она всегда работает. 2). Я сделал waitpid в своем родительском процессе, чтобы, если ребенок умрет, я узнаю об этом. 3) - А что, если сам родитель умирает? Я все еще хочу контролировать этот разветвленный процесс. Однако, когда мой родитель умирает, этот разветвленный процесс принадлежит init. Таким образом, init (process id = 1) становится новым родителем дочернего процесса. Но по некоторым причинам я все еще хочу снова подключиться к моему дочернему процессу через какую-то другую программу. Могу ли я это сделать?Повторное подключение к процессам в Linux
ответ
Вы можете использовать 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.)
Спасибо за ответ –
@utkarshkatiyar, пожалуйста, отметьте как ответ, если это поможет. – D3Hunter
извините. Ваш ответ мне не помогает. Но, скорее, это помогло мне узнать еще один аспект, поэтому я буду отмечать его как ответ. –
- 1. Повторное подключение к сиротскому процессу в QT
- 2. повторное подключение к серверу/серверу
- 3. Повторное подключение страниц к ноутбуку в GTK #
- 4. Подключение к разъему в Linux
- 5. Подключение приложений UWP, размещенных ApplicationFrameHost, к их реальным процессам
- 6. Повторное подключение BLE
- 7. Повторное подключение JMS-прослушивателя к JBossMQ
- 8. Повторное подключение пользователей к соединениям WebSocket
- 9. Автоматическое повторное подключение к абоненту zmq
- 10. Повторное подключение MySQL к тайм-ауту
- 11. Как предотвратить повторное подключение метеора к серверу
- 12. Повторное подключение исходных файлов к существующему SVN
- 13. Jupyter переносит повторное подключение к ядру
- 14. Повторное подключение к Redis после перезагрузки
- 15. Повторное подключение X-сервера к потерянному процессу
- 16. Повторное подключение к websocket с использованием AutoBahn
- 17. Автоматическое повторное подключение Spring к IBM MQ
- 18. Повторное подключение к устройству с pySerial
- 19. Повторное подключение к последовательному порту после разъединения
- 20. Asterisk: повторное подключение к удаленному mySQL?
- 21. MySQL удаленное подключение к Linux
- 22. Повторное подключение ldap в WildFly
- 23. Подключение Linux к mysql PHP
- 24. Autobahn + перекрученное повторное подключение
- 25. C Программирование сокетов: повторное подключение и повторное подключение сокета
- 26. Что добавляет .NET к процессам и потокам Windows/Linux?
- 27. SSH подключение к Amazon EC2 в Linux
- 28. Повторное подключение исключения TCPClient исключает
- 29. повторное подключение клиентского сервера teracotta
Это на самом деле процесс сиротой в этом случае. Но вопрос остается тем же. Могу ли я снова присоединиться к этому сиротскому процессу? –
Что произойдет, если вы снова запустите waitpid() в новом процессе? Вы должны сохранить дочерний pid в файл в исходном родительском процессе. –
Я сделал то же самое. Сохранял pid этого процесса и снова остыл на этом. Но, к сожалению, это тоже не работает, потому что waitpid может быть вызван только для дочерних процессов его родителем, а в случае сиротского процесса init (pid = 1) стал родителем, поэтому теперь waitpid выдает сообщение об ошибке: никакой ребенок с этим pid –