Відповіді:
Зважаючи на те, як працюють завдання Linux та права власності на процеси, я боюся, що реально повернути процес не можливо, без допомоги процесу прийняття.
Батько може "відхилити" дитину, яку потім "усиновить" у процесі, який називається "init". Безпека системи не дозволяє комусь захопити чужі процеси. Коли ви відхилилися від нього, процес стає чужим (init's) для контролю. Ви як "користувач" все ще можете вбити процес, але повернути його не можете. Спроба примусити init повернути ваш процес навряд чи спрацює, оскільки init навіть не читає пошту.
Як начебто це звучить, воно дійсно зводиться до відповіді "Не роби цього!".
reptyr
(див. Мою відповідь на прикладі використання).
Хоча я вважаю, що це не допомагає нікому в нещасній ситуації відмовитися від неправильного процесу, якщо ви повинні вигнати відмови від свого робочого процесу та замінити його на:
https://github.com/nelhage/reptyr
Ви зможете відредагувати будь-який процес (тобто перемістити його всередині екрана).
reptyr
це рішення, але не потрібно припиняти використання disown
. Для наочності я написав нову відповідь.
Все, що вам потрібно, це reptyr
. Він живе на GitHub і постачається для Debian ще з Wheezy, а також, можливо, і для інших GNU / Linux дистрибутивів. Це виведе на перший план ваш відмовлений процес у поточному терміналі, якщо ви будете викликати його з його ідентифікатором процесу (PID). Так, наприклад:
pgrep -f DISOWNED_PROCESS # to find out the PID of the disowned process
reptyr PID # insert this PID here
Вибач, ні. В принципі, це було б можливо, оскільки відхилення просто змінює внутрішній стан оболонки - це в основному видаляє ідентифікатор процесу зі списку, і його можна буде повернути без зайвих клопотів (вам доведеться бути трохи обережними при тестуванні, що повторно закріплений під знаходиться в потрібному сеансі, але це непереборно). Але жодна із звичайних оболонок (bash, ksh, tcsh, zsh), здається, не має способу повторного додавання. (Хоча з Zsh ви можете написати на jobstates
, jobdirs
і jobtext
асоціативні масиви, я не знаю , скільки ви можете досягти таким чином.)
Якщо ви хочете, щоб оболонка надсилала сигнали до відключеного процесу, як це робиться для його власних підпроцесів, ви можете написати завдання на заглушку, яке чекає, поки він отримає сигнал, і той самий сигнал відправить до відключеного процесу. Ви можете надіслати SIGSTOP
і SIGCONT
в відключений процес, щоб імітувати Ctrl+ Zі bg
. Нічого з цього не буде настільки зручним, як повторне володіння.
Які обставини? Якщо ви просто хочете повернути свій термінал на деякий час, замість цього ви можете скористатися екраном GNU . Це не зовсім відокремлює процес від терміналу - Екран емулює один для вигоди процесу, - але ви можете приєднати та від'єднати його від реального терміналу, який ви використовуєте. Ви навіть можете від’єднати екран, вийти з системи, а потім увійти в систему і знову приєднатись до того ж екрану.