Як мені відшкодувати процес відмови?


12

Як і в багатьох попередніх запитаннях, я виявив, що виконую роботу, яку б хотілося, щоб я працював на екрані. Мене змусили відмовитись від процесу, оскільки мені потрібно було відключитися. Тепер, коли я відновився, я бачу, що процес все ще триває. Як я можу "відновити" процес, щоб я міг бачити його результат і давати йому вхід?

Це питання відрізняється від простого переміщення запущеного процесу на екран тим, що воно включає повторне відкриття втрачених ручок stdin / out / err.


Відповіді:


6

Це повторне запитання - див. Переміщення вже запущеного процесу на екран , який вказує на retty , що є самоописаним жахливим хаком , реалізуючи те, що я завжди здогадувався, можливо, але ніколи не намагався: він знаходить fd 0, 1 , і 2 (стандартні відповідно, помилки та помилки відповідно) для цього процесу і приєднуються до них, як жахливий аберрантний паразит, якого не повинно бути.


Я не знав про цю програму - хоча правду сказати, її не дуже добре використовувати! Гарна відповідь, незалежно.
Ендрю М.

6

Відмовившись від процесу, ви фактично говорите, що хочете, щоб він ігнорував SIGHUPs, видані терміналом. Після закриття сеансу (скажімо, bash) цей процес стане власником init. Тож, коли ви скажете, що хочете повторно володіти процесом після того, як ви відмовились від права власності, ви говорите, що хочете забрати право власності на інший процес - який не реалізується, і з поважної причини. Це просто неможливо зробити витончено в Linux.


1
Процеси не володіють іншими процесами зовсім так. Процес відкликання все ще триває як ви.
mattdm

Вони роблять після закриття батьківського сеансу - на що вказує його питання. Я оновив свою відповідь, щоб це відобразити.
Андрій М.

Батьківський процес змінюється на init, але це відрізняється від права власності. EUID та UID процесу залишаються поточними у початкового користувача. В іншому випадку це може бути потенційно корисним, тому що кожен користувач раптом отримає спосіб виконання коду як іншого користувача, а системний користувач - не менше.
mattdm

1
EUID / UID! = PPID. Я кажу про право власності на процес, а не про дозволи.
Ендрю М.

Так, я думаю, що ми погоджуємось про все, окрім значення терміна "право власності". Це стосується ідентифікатора користувача, з яким пов'язаний процес, а не його батьківського процесу. Можливо, плутанина пов'язана з командою disownbash, яка, незважаючи на назву, насправді не має нічого спільного зі зміною права власності на процес.
mattdm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.