Bash/ZSH: Отмена 'отрицает'

Существует ли способ 'повторно прикрепить' процесс к таблице задания оболочек после него, это 'отрицали'?

Править: $SEARCHENGINE полностью приводит меня к сбою. Не выглядит слишком хорошим.

30
задан 03.09.2010, 14:00

3 ответа

Рассматривая, как задания Linux и работы владения процесса, я боюсь, что не действительно возможно повторно владеть процессом без справки от процесса принятия.

Родитель может 'отрицать' ребенка, который затем 'усыновлен' процессом, названным 'init'. Безопасность системы препятствует тому, чтобы кто-то захватил чужие процессы. При отрицании его процесс становится чужой (init's) для управления. Вы как 'пользователь' могли все еще уничтожить процесс, но Вы не можете вернуть его. Попытка принудить init для возврата процесса вряд ли будет работать, поскольку init даже не читает почту.

Столь средний, как это звучит, это действительно сводится к ответу, "Не делают этого!".

16
ответ дан 07.12.2019, 09:17

Каковы обстоятельства? Если Вы просто хотите вернуть свой терминал некоторое время, Вы могли бы использовать Экран GNU вместо этого. Это не вполне отсоединяет процесс от терминала - Экран эмулирует один для преимущества процесса - но можно присоединить и отсоединить его от реального терминала, который Вы используете. Можно даже отсоединить экран, выйти из системы, затем войти в и повторно прикрепить к тому же экрану.

0
ответ дан 07.12.2019, 09:17

Извините, нет. В принципе это было бы возможно, начиная с отрицания просто изменяет некоторое внутреннее состояние оболочки — это в основном удаляет идентификатор процесса из списка, и это могло быть отложено без слишком большого количества стычки (необходимо будет быть немного осторожными в тестировании, что повторно прикрепленный pid находится на правильной сессии, но это весьма преодолимо). Но ни одна из обычных оболочек (удар, ksh, tcsh, zsh), кажется, не имеет способа повторно добавить. (Хотя с zsh можно записать в jobstates, jobdirs и jobtext ассоциативные массивы; я не знаю, насколько можно достигнуть того пути.)

Если Вы хотите, чтобы оболочка отправила сигналы в отрицаемый процесс, как это делает для его находящихся в собственности подпроцессов, можно записать тупиковое задание, которое ожидает, пока это не получает сигнал и отправляет тот же сигнал в отрицаемый процесс. Можно отправить SIGSTOP и SIGCONT к отрицаемому процессу для моделирования Ctrl+Z и bg. Ни одно из этого не будет вполне так же удобно как перевладение.

1
ответ дан 07.12.2019, 09:17

В то время как я предполагаю, что это не помогает никому в неудачной ситуации того, что отрицало неправильный процесс, если необходимо было выслать, отрицают от рабочего процесса и заменяют его:

https://github.com/nelhage/reptyr

Вы смогли бы повторно породить любой процесс (т.е. переместить его в экране).

18
ответ дан 07.12.2019, 09:17

Теги

Похожие вопросы