Si vous ^ Z d'un processus, il est "arrêté". Comment revenez-vous?

83

J'ai accidentellement "arrêté" mon telnetprocessus. Maintenant, je ne peux ni "revenir en arrière", ni le tuer (il ne répond pas kill 92929, 92929 étant l'identifiant du processus).

Donc, ma question est la suivante: si vous avez un processus arrêté en ligne de commande Linux, comment pouvez-vous y revenir ou le tuer sans avoir à y recourir kill -9?

bobobobo
la source

Réponses:

92

Le moyen le plus simple est de le fgporter au premier plan:

$ help fg
fg: fg [job_spec]
    Move job to the foreground.

    Place the job identified by JOB_SPEC in the foreground, making it the
    current job.  If JOB_SPEC is not present, the shell's notion of the
    current job is used.

    Exit Status:
    Status of command placed in foreground, or failure if an error occurs.

Alternativement, vous pouvez exécuter bgle programme en arrière-plan:

$ help bg
bg: bg [job_spec ...]
    Move jobs to the background.

    Place the jobs identified by each JOB_SPEC in the background, as if they
    had been started with `&'.  If JOB_SPEC is not present, the shell's notion
    of the current job is used.

    Exit Status:
    Returns success unless job control is not enabled or an error occurs.

Si vous venez de frapper Ctrl Z, alors pour ramener le travail, exécutez-le fgsans arguments.

terdon
la source
Merci!! Je suppose que c’est l’équation de Alt + Tab. Savez-vous ce qui s'est passé dès que je l'ai fait fg telnetcependant. Il a dit Terminated, probablement b / c de mon killcmd précédent .
bobobobo
@obobobo probablement, oui. Quoi qu'il en soit, le fgn'a pas besoin d'arguments. Si vous venez de frapper ^Z, lancez-vous fgdans le même terminal et le premier travail reprendra.
terdon
48

Vous pouvez utiliser jobspour répertorier le processus suspendu. Prenons l'exemple. Commencez par un processus:

$ sleep 3000  

Ensuite, vous suspendez le processus:

^Z
[1]+  Stopped                 sleep 3000

Vous pouvez lister le processus:

$ jobs
[1]+  Stopped                 sleep 3000

et le ramener au premier plan:

$ fg %1
sleep 3000

Le %1correspond à la [1]liste avec la jobscommande.

Luis
la source
19

Vous devriez pouvoir redémarrer un processus suspendu en utilisant la killcommande pour envoyer au processus le signal CONTINUE, à partir de la ligne de commande, ainsi:

kill -CONT 92929
Geeb
la source
1
Cela le remettra en marche mais ne sera pas mis au premier plan.
bahamat
1
@bahamat Oui, tout à fait vrai. Il faudrait toujours à l' fgintérieur du terminal d'origine. J'aime bien arrêter les programmes GUI et -CONT pour économiser les ressources, mais ils fonctionnent de manière efficace en arrière-plan de toute façon.
Geeb
En cas de sleepce sera killle processus qui n'est pas ce que vous voulez ..;)
Timo