Parfois, je lance une application dans le gnome-terminal, mais je dois soudainement redémarrer gnome ou quelque chose du genre. Je suppose que la réponse à la question est également utile alors je veux me déconnecter de SSH où quelque chose se passe.
L'arborescence du terminal de Gnome ressemble à ceci:
gnome-terminal
bash
some-boring-process
Puis-je "détacher" bash
de gnome-terminal
(ou détacher some-boring-process
de bash et rediriger sa sortie quelque part)? Si je tue juste gnome-terminal
, bash
sera tué à volonté tous ses sous-processus
Réponses:
Si
some-boring-process
est en cours d'exécution dans votre session bash actuelle:ctrl-z
pour vous donner l'invite bashbg
jobs
commandedisown -h %1
(remplacez le numéro de travail réel ici).Cela ne fait rien pour rediriger la sortie - vous devez y penser lorsque vous lancez votre processus ennuyeux. [Modifier] Il semble y avoir un moyen de le rediriger https://gist.github.com/782263
Mais sérieusement, regardez dans l'écran. J'ai des obus sur un serveur distant qui fonctionnent depuis des mois.
la source
screen
parfois, bien que celabash: bg: current: no such job
?C'est exactement ce pour quoi screen et tmux ont été créés. Vous exécutez le shell dans la session screen / tmux et vous pouvez vous déconnecter / vous reconnecter à volonté. Vous pouvez également avoir plusieurs sessions shell en cours d'exécution dans un même terminal gnome.
la source
screen
a ses problèmes et je n'ai pas envie de l'utiliser à chaque session de ma viescreen
,tmux
oudtach
(éventuellement avecdvtm
) sont excellents pour cela, mais si vous pensez ne pas en utiliser, vous pourrez peut-être en tirer partinohup
.la source
screen
a ses problèmes et je n'ai pas envie de l'utiliser à chaque session de ma vienohup
fonctionne sur un processus en cours en utilisant l'-p
option (si disponible).-p
optionnohup
dans les pages de manuel; sur quel système êtes-vous?tmux
, j'ai utilisé cette-p
option sur une boîte Solaris. J'ai aussi de vagues souvenirs de l'avoir fait sur une boîte dezsh
bâtards CentOS (peut-être une fonction intégrée qui la prend en charge?), Mais je ne trouve aucun document à ce sujet.bash
nizsh
fourninohup
.Si vous souhaitez continuer à interagir avec le processus enfant plutôt que de le mettre en arrière-plan et de le laisser continuer, il existe en fait un programme appelé retty qui est une preuve de concept pour "voler" un processus de son tty actuel et le remettre en place sur le l'actuel.
Cependant, il fait des choses horribles, notamment en collant du code d'assemblage sur la pile de l'application réattachée. Et ce code n'a pas été mis à jour pour x86_64.
Il existe un autre programme qui adopte une approche peut-être meilleure, gelant le processus dans l’espace utilisateur dans un fichier, à partir duquel il peut être restauré ultérieurement (éventuellement sur un autre tty.). Ceci est un cryopid , et ce projet semble aussi s’être arrêté dans le phase de validation de principe, et ne fonctionne pas avec Linux moderne en l'état. Et bien.
Juste pensé que cela devrait être ici pour être complet. Si le fait de recourir à un horrible vaudou ne vous dérange pas, c'est une possibilité - du moins une possibilité théorique.
la source
Si je lance quelque chose que je veux finir quoi qu'il arrive (à part le redémarrage du système), je l'utilise
nohup
et l'exécute en arrière-plan. Contrairement à l'écran et autres, vous ne pouvez pas vous reconnecter aux processus. Cependant, on peut trouver n'importe quelle sortie à part la redirection ailleursnohup.out
.J'utilise
screen
quand je veux pouvoir changer de terminal pour un processus. Tels que démarrer un processus de la maison / du travail et passer à l’autre. Comme toute autre session de terminal, la sortie finira par défiler en haut de la mémoire tampon.EDIT: Si vous avez déjà lancé le processus, vous pouvez
disown
empêcher leHUP
signal d’être envoyé à la fermeture du processus.la source
screen
a ses problèmes et je n'ai pas envie de l'utiliser à chaque session de ma vieVous pouvez empêcher un processus (PID) de recevoir un signal HUP à la fin de la session du terminal. Utilisez la commande suivante:
la source
nohup: invalid option -- 'p'
. Quelle version denohup
vous utilisez sur quel type de système?-p
option sous Linux. Cette réponse est donc spécifique à Solaris et AIX. Bon à savoir cependantCe script dissocie le processus enfant du parent et l'assigne au processus init :
la source