Je fais des essais de scripts de migration de données à exécution longue, sur SSH. Disons que je commence à exécuter un script vers 16 heures; À présent, 18 heures sont là et je me maudis de ne pas avoir fait tout ça screen
.
Existe-t-il un moyen de nohup
procéder "de manière rétroactive" à un processus ou dois-je laisser mon ordinateur en ligne toute la nuit? S'il est impossible d'attacher screen
à / nohup
un processus que je l' ai déjà commencé, alors pourquoi? Quelque chose à voir avec la façon dont les processus parent / enfant interagissent? (Je n'accepterai pas une réponse "non" qui ne répond pas au moins à la question "pourquoi" - désolé;))
disown
. blogs.oracle.com/ksplice/entry/disown_zombie_children_and_theRéponses:
Si vous utilisez Bash, vous pouvez exécuter
disown -h job
la source
disown %1
si 1 est le jobpec, contrairement à fg ou bg où vous utilisez simplementbg 1
serverwatch.com/tutorials/article.php/3935306/…Utilisez le reptyr
Du README:
Quelques articles de blog de son auteur:
la source
Pour voler un processus d'un tty à votre tty actuel, vous pouvez essayer ce hack:
http://www.ucc.asn.au/~dagobah/things/grab.c
Il a besoin d’un peu de reformatage pour pouvoir compiler les versions actuelles de Linux / glibc, mais fonctionne toujours.
la source
Lorsqu'un processus démarre, STDIN, STDOUT et STDERR sont connectés à quelque chose . Généralement, vous ne pouvez pas changer cela une fois la commande lancée. Dans le cas que vous décrivez, c'est probablement un terminal associé à la session SSH. nohup à peu près tout simplement ...
En d’autres termes, définit STDIN sur / dev / null, STDOUT sur un fichier et STDERR sur STDOUT. Screen fait des choses beaucoup plus sophistiquées impliquant la mise en place de ttys qui se dirigent vers lui-même.
Je ne connais aucun moyen de supprimer rétroactivement ou de filtrer un processus en cours. Si vous cd dans / proc / $ pid / fd et voyez ce que 0, 1 et 2 désignent.
Vous pouvez avoir de la chance avec désavoué, mais pas si le processus tente de faire quoi que ce soit avec STDIN, STDOUT ou STDERR.
la source
Cryopid est un développement ultérieur de l'auteur de grab.c qui fige un processus dans un fichier que vous exécutez ensuite (à l'intérieur de l'écran) pour reprendre le processus.
la source
Je ne peux que vous donner un simple "Non" sans le pourquoi pour la partie écran, je serais intéressé par la raison moi-même.
Cependant avez-vous essayé
disown
(une bash intégrée)la source
nohup sur Solaris / OpenSolaris a un indicateur -p pour indiquer à nohup un processus en cours d'exécution - par exemple, reportez-vous à la page de manuel Solaris 10 nohup .
la source
J'ai récemment vu un lien vers neercs , un utilitaire semblable à un écran, construit à l'aide de libcaca, une bibliothèque de couleurs ascii-art. Parmi d'autres fonctionnalités, il offre la possibilité de capturer un processus existant et de le re-parent au sein de votre session (écran) suivante.
Je ne l'ai pas utilisé cependant, donc je ne peux pas dire si cela fonctionne ou non.
la source
Je suis probablement en train de penser cela, alors n'hésitez pas à me corriger (j'ai déjà appris le désaveu!) ... Un ctrl-Z et un "bg" ne fonctionneraient-ils pas au moins pour que le processus s'exécute en arrière-plan? Ou bien est-ce le problème clé pour lequel vous souhaitez toujours voir STDOUT pendant son exécution?
la source
Si vous ne pouvez pas vivre avec le processus et que vous ne vous opposez pas au chargement de modules de noyau aléatoires, vous pourriez faire pire que de regarder Snoop . Alternativement, il y a quelques autres projets. Voici un appel injcode, qui peut principalement faire ce que vous voulez faire.
la source
Vous pouvez rediriger la sortie du processus dans un fichier avec gdb
https://blog-en.openalfa.com/how-to-detach-from-the-terminal-a-running-process-in-linux
puis le renier
Upd: Je devais exécuter gdb avec sudo et une commande légèrement différente de gdb sous Ubuntu 18.04:
p (int)dup2(open("/tmp/test.stdout", 1), 1)
la source
Je voulais utiliser
nohup
(ou similaire) pour démarrer lelinks
navigateur de ligne de commande et y attacher ensuite pour télécharger un fichier à partir du site Web ASP.NET avec un processus d'authentification complexe et de nombreux états d'affichage masqués qui rendaient l'utilisation du travail difficile. aveccurl
/wget
.J'ai finalement fini par utiliser
tmux
ce qui a résolu le travail tout simplement génial:tmux
links
dans mon cas) et laissez-la en cours d'exécutiontmux attach
pour ramener l'application à l'écran.la source
Est-ce que tu t'inquiètes de la fin de la session? Dans ce cas, vous pouvez Ctrl-z et bg le processus, puis il suffit de mettre quelque chose pour maintenir la session active comme un "ping -t localhost" ou "top".
Si c'est ce que vous voulez vous déconnecter, alors je crains de ne pas pouvoir ajouter d'autres commentaires.
la source