Solution 1 :
Si vous utilisez Bash, vous pouvez exécuter disown -h job
renier
disown [-ar] [-h] [jobspec ...]
Sans options, chaque jobspec est supprimé du tableau des jobs actifs. Si le
-h
est donnée, le travail n'est pas supprimé de la table, mais est marqué de sorte que SIGHUP n'est pas envoyé au travail si le shell reçoit un SIGHUP. Si jobspec n'est pas présent, et ni le-a
ni-r
est fournie, la tâche en cours est utilisée. Si aucune spécification de poste n'est fournie, le-a
option signifie supprimer ou marquer tous les travaux ; le-r
l'option sans argument jobspec limite l'opération aux tâches en cours d'exécution.
Solution 2 :
Utilisez Reptyr
À partir du LISEZMOI :
reptyr - A tool for "re-ptying" programs.
-----------------------------------------
reptyr is a utility for taking an existing running program and
attaching it to a new terminal. Started a long-running process over
ssh, but have to leave and don't want to interrupt it? Just start a
screen, use reptyr to grab it, and then kill the ssh session and head
on home.
USAGE
-----
reptyr PID
"reptyr PID" will grab the process with id PID and attach it to your
current terminal.
After attaching, the process will take input from and write output to
the new terminal, including ^C and ^Z. (Unfortunately, if you
background it, you will still have to run "bg" or "fg" in the old
terminal. This is likely impossible to fix in a reasonable way without
patching your shell.)
Quelques articles de blog de son auteur :
- reptyr :Attachez un processus en cours d'exécution à un nouveau terminal
- reptyr :Changer le terminal de contrôle d'un processus
Solution 3 :
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 reformatage pour être compilé vers les versions Linux/glibc actuelles, mais fonctionne toujours.
Solution 4 :
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, il s'agit probablement d'un tty associé à la session ssh. nohup fait à peu près juste ...
command < /dev/null > nohup.out 2>&1
Autrement dit, définit STDIN sur /dev/null, STDOUT sur un fichier et STDERR sur STDOUT. Screen fait des choses beaucoup plus sophistiquées impliquant la configuration de ttys qui se dirigent vers lui-même.
Je ne connais aucun moyen de nohup rétroactif ou de screenize un processus en cours d'exécution. Si vous cd vers /proc/$pid/fd et voyez ce que 0, 1 et 2 pointent.
Vous pourriez avoir de la chance avec le désaveu, mais pas si le processus essaie de faire quoi que ce soit avec STDIN, STDOUT ou STDERR.
Solution 5 :
Je ne peux que te donner un simple "Non" sans le pourquoi pour la partie écran, je serais moi-même intéressé par la raison toi.
Cependant avez-vous essayé disown
(un bash intégré)
~ $ echo $SHELL
/bin/bash
~ $ type disown
disown is a shell builtin
~ $ help disown
disown: disown [-h] [-ar] [jobspec ...]
By default, removes each JOBSPEC argument from the table of active jobs.
If the -h option is given, the job is not removed from the table, but is
marked so that SIGHUP is not sent to the job if the shell receives a
SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all
jobs from the job table; the -r option means to remove only running jobs.