Comment puis-je supprimer un travail qui a été lancé dans un autre shell (fenêtre de terminal ou onglet)?

9

Si je commence un processus et que je le mets en arrière-plan dans une fenêtre de terminal (disons ping google.com &), je peux le tuer en utilisant kill %1(en supposant que c'est le travail 1).

Cependant, si j'ouvre une autre fenêtre de terminal (ou onglet), le processus en arrière-plan n'est pas répertorié sous jobset ne peut pas être tué directement à l'aide kill.

Est-il possible de tuer ce processus à partir d'une autre fenêtre ou d'un autre onglet de terminal?

Remarque: J'utilise l'émulateur de terminal Xfce 0.4.3 et bash (bien que si une solution existe dans un autre shell commun mais pas bash, je suis également ouvert à cela)

DQdlM
la source

Réponses:

10

Oui, tout ce que vous devez savoir est l'ID de processus (PID) du processus. Vous pouvez le trouver avec la pscommande ou la pidofcommande.

kill $(pidof ping)

Devrait fonctionner à partir de tout autre shell. Si ce n'est pas le cas, vous pouvez utiliser ps et grep pour le ping.

Keith
la source
6

Si vous tapez topdans une autre fenêtre de terminal, il répertoriera tous les processus en cours d'exécution. Notez l'ID de processus de votre joblà-bas, puis appuyez sur qpour quitter cet écran. Ensuite, killle processus comme d'habitude.

arthankamal
la source
merci pour votre réponse mais topne semble pas montrer tous les processus spécifiques en cours d'exécution dans le shell (par exemple, il ne s'affiche pas ping). Cela me donne un PID pour l'émulateur de terminal, mais cela tue l'émulateur de terminal comme vous vous en doutez.
DQdlM
1
si vous saisissez top -U yourusernameterminal, il répertoriera uniquement le processus que vous utilisez.
arthankamal
impressionnant! +1 juste pour ça! merci
DQdlM
en haut, frappez k puis 15 pour un soft-kill (essayez d'abord), 9 pour un hard-kill.
Michael Durrant
4

Je fais habituellement quelque chose comme ça:

ps aux | grep $PROCESS | grep -v grep | awk '{print $2 " " $11}'

Par exemple, si $ PROCESS = "bash", voici la sortie de ma session actuelle:

2683 bash
4481 bash
5695 bash

Ensuite, je le ferais kill $PIDpour ce que /bin/bashje ne veux plus courir.

ps, grepEt (éventuellement) awksont utiles pour la chasse vers le bas à PIDs kill.

Charles Boyd
la source