GNU/Linux >> Tutoriels Linux >  >> Linux

Puis-je nohup/filtrer un processus déjà démarré ?

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.

Linux
  1. J'ai utilisé Ctrl-Alt-F6 sous Linux et je ne peux pas récupérer mon écran

  2. Puis-je utiliser GDB pour déboguer un processus en cours ?

  3. Comment puis-je savoir si je suis dans un écran ?

  4. exit() peut-il échouer à terminer le processus ?

  5. Comment obtenir l'ID de processus pour tuer un processus nohup ?

Options de commande nohup sous Linux

Comment puis-je tuer un processus par nom au lieu de PID?

Comment arrêter un processus d'écran sous Linux?

Comment puis-je savoir quel processus utilise swap?

Comment attacher un terminal à un processus détaché ?

Un processus peut-il avoir un propriétaire ? Qu'est-ce que ça veut dire?