Есть ли способ «присоединить» процесс к таблице заданий оболочки после того, как он «отрекся»?
Редактировать: $ SEARCHENGINE полностью меня подводит. Не выглядит слишком хорошо.
Учитывая то, как работает Linux и владелец процесса, я боюсь, что на самом деле невозможно переуступить процесс без помощи процесса принятия.
Родитель может «отречься» от ребенка, который затем «усыновляется» процессом с именем «init». Система безопасности не позволяет кому-либо захватывать чужие процессы. Когда вы отрекаетесь от этого, процесс становится чьим-либо (инициатором) для управления. Вы, как «пользователь», все еще можете убить процесс, но вы не можете его вернуть. Попытка принудить init вернуть ваш процесс вряд ли сработает, так как init даже не читает почту.
Как бы странно это ни звучало, все сводится к ответу «Не делай этого!».
reptyr
(см. Мой ответ для примера использования).Хотя я полагаю, что это никому не поможет в печальной ситуации, когда вы отреклись от неправильного процесса, если бы вы исключили из вашего рабочего процесса отречение и заменили его следующим:
https://github.com/nelhage/reptyr
Вы сможете переписать любой процесс (т.е. переместить его внутрь экрана).
источник
reptyr
это решение, но нет необходимости прекращать использованиеdisown
. Для наглядности я написал новый ответ.Все, что вам нужно, это
reptyr
. Он работает на GitHub и был упакован для Debian начиная с Wheezy, и, вероятно, также для других дистрибутивов GNU / Linux. Он будет отображать приоритет вашего процесса в текущем терминале, если вы вызовете его с идентификатором процесса (PID). Так, например:источник
Простите, нет. В принципе, это было бы возможно, так как отмена просто изменяет некоторое внутреннее состояние оболочки - она в основном удаляет идентификатор процесса из списка и может быть возвращена без особых хлопот (вам нужно быть немного осторожнее при тестировании, что обновленный pid находится в правильном сеансе, но это не является непреодолимым). Но ни одна из обычных оболочек (bash, ksh, tcsh, zsh), кажется, не имеет способа добавить заново. (Хотя с Zsh вы можете написать на
jobstates
,jobdirs
иjobtext
ассоциативные массивы, я не знаю , сколько вы можете достичь таким образом.)Если вы хотите, чтобы оболочка отправляла сигналы в отмененный процесс, как это делается для его собственных подпроцессов, вы можете написать задание-заглушку, которое ждет, пока не получит сигнал и не отправит тот же сигнал в отложенный процесс. Вы можете отправить
SIGSTOP
иSIGCONT
в отрешенный процесс для имитации Ctrl+ Zиbg
. Ничто из этого не будет таким удобным, как повторное владение.источник
Каковы обстоятельства? Если вы просто хотите вернуть свой терминал на некоторое время, вместо этого вы можете использовать GNU Screen . Он не совсем отсоединяет процесс от терминала - Screen эмулирует его для выгоды процесса - но вы можете подключить и отсоединить его от реального терминала, который вы используете. Вы даже можете отсоединить экран, выйти из системы, затем снова войти в систему и повторно присоединить к тому же экрану.
источник