Передача снаряда ребенку перед прерыванием беременности - PullRequest
1 голос
/ 19 июня 2010

Текущий сценарий, я запускаю процесс, который разветвляется, и через некоторое время он прерывает ().
Дело в том, что и форк, и оригинальный процесс печатают в оболочку, но после того, как оригинальный умирает, оболочка«возвращает» к приглашению.
Я бы хотел, чтобы оболочка не возвращалась к приглашению и сохраняла, как если бы процесс не умирал, чтобы дочерний процесс справился с ситуацией.

Я пытаюсь выяснить, как это сделать, но пока ничего, мое первое предположение касается обработки tty, но я не уверен, как это работает.

Я забыл упомянуть, оболочказахват ребенка может быть осуществлен во время разветвления, если это облегчает это, посредством репликации fd или некоторого перенаправления.

Ответы [ 3 ]

2 голосов
/ 19 июня 2010

Я думаю, что вам, вероятно, придется пойти на третий процесс, который обрабатывает взаимодействие с пользователем, общаясь с «родителем» и «потомком» через каналы.

Вы даже можете сделать его довольно легкой оболочкой,просто передавая данные назад и вперед к родителю и терминалу, пока родитель не умрет, а затем переключаясь на передачу к / от ребенка.

Чтобы добавить еще немного, я думаю, что основная проблема, которую выМы столкнемся с тем, что выполнение команды оболочкой просто не работает таким образом.Оболочка выполняет функцию вызова system () - она ​​будет ждать процесса, который она только что породила, и когда она это сделает, она снова представит пользователю приглашение.На самом деле это не проблема tty, а то, как работает оболочка.

1 голос
/ 19 июня 2010

bash (и я полагаю, что другие оболочки) имеют команду wait:

wait: wait [n]

Дождаться указанного процесса и сообщить о его статусе завершения.Если N не задано, ожидаются все активные в данный момент дочерние процессы, а код возврата равен нулю.N может быть идентификатором процесса или спецификацией задания;если задана спецификация задания, все процессы в конвейере задания ожидаются.

0 голосов
/ 19 июня 2010

Рассматривали ли вы инверсию родительских и дочерних отношений?

Если порядок, в котором умирают новые процессы, предсказуем, запустите код, который прервется в «потомке», и код, который будет продолжен вродитель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...