Как отследить обработанный запуск оболочкой извне оболочки? - PullRequest
0 голосов
/ 06 июля 2011

Я запускаю оболочку с exec ("/ bin / sh") в программе на Си.Как я могу отследить процесс, запущенный процессом "sh"?Например, если я введу «ls» в этом процессе / bin / sh, я бы хотел получить pid «ls», а также получать уведомление о его завершении.

EDIT:

Чтобы сделать мой вопрос более общим.Как вы отслеживаете процессы, запущенные самим процессом?

1 Ответ

0 голосов
/ 05 января 2012

Если вы хотите получать уведомления непосредственно, когда ваш ребенок заводит собственного ребенка (вашего внука) или когда этот внук выходит, вы должны отследить своего ребенка. Нет портативного способа сделать это.

В Linux вы можете использовать системный вызов ptrace() для этого. По сути, вы становитесь отладчиком, привязанным к дочернему процессу, например gdb или strace. Другие операционные системы имеют аналогичные средства. Но есть некоторые побочные эффекты, и его использование желательно ограничивать тестированием и устранением неполадок.

Единственная переносимая вещь, которую вы можете сделать, - это неоднократно просматривать вывод ps и проверять его на наличие процессов, у которых ваш ребенок является родительским, но вы можете пропустить недолговечные процессы, которые порождаются, и быстро завершить работу, прежде чем вы получите шанс заметить их, и этот подход также трудоемкий.

...