Come posso richiedere un processo rinnegato?


12

Simile a molte domande precedenti, mi sono trovato a eseguire un lavoro che avrei voluto avere eseguito sullo schermo. Sono stato costretto a rinnegare il processo perché avevo bisogno di disconnettermi. Ora che mi sono riconnesso, vedo che il processo è ancora in esecuzione. Come posso "recuperare" il processo, in modo da poter vedere il suo output e dargli input?

Questa domanda è distinta dal semplice spostamento di un processo in esecuzione sullo schermo, in quanto comporta la riapertura di handle stdin / out / err persi.


Risposte:


6

Questa è una domanda duplicata: vedi Spostamento di un processo già in esecuzione su Screen , che punta a Retty , che è un orribile hack descritto da solo che implementa ciò che avevo sempre immaginato potesse essere possibile ma mai realmente provato: trova fd 0, 1 e 2 (standard in, out ed errore, rispettivamente) per il processo e si attacca a loro, come un orribile parassita aberrante che non dovrebbe essere.


Non sapevo di questo programma - anche se a dire la verità, non è una buona pratica usarlo! Buona risposta, a prescindere.
Andrew M.

6

Negando il processo, stai effettivamente dicendo che vuoi che ignori SIGHUP emessi dal terminale. Una volta chiusa la sessione (diciamo, bash), questo processo diventerà di proprietà di init. Quindi quando dici di voler possedere un processo dopo aver rinunciato alla proprietà, stai dicendo che vuoi toglierti la proprietà da un altro processo - che non è implementato, e per una buona ragione. Questo semplicemente non è possibile farlo con garbo in Linux.


1
I processi non possiedono altri processi abbastanza simili. Un processo sconosciuto è ancora in esecuzione come te.
Mattdm,

Lo fanno una volta che la sessione genitore è stata chiusa, come indicato dalla sua domanda. Ho aggiornato la mia risposta per riflettere questo.
Andrew M.

Il processo padre cambia in init, ma è diverso dalla proprietà. L'EUID e l'UID del processo rimangono quelli dell'utente originale. Altrimenti, questo potrebbe essere potenzialmente sfruttabile, poiché ogni utente avrebbe improvvisamente un modo di eseguire il codice come un altro utente e un utente di sistema non meno.
mattdm,

1
EUID / UID! = PPID. Sto parlando della proprietà del processo, non delle autorizzazioni.
Andrew M.

Sì, penso che siamo d'accordo su tutto tranne che per il significato del termine "proprietà del processo". Questo si riferisce all'ID utente a cui è associato il processo, non al processo principale. Forse la confusione è dovuta al disowncomando specifico di bash, che, nonostante il nome, in realtà non ha nulla a che fare con la modifica della proprietà del processo.
mattdm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.