bonjour ,
je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure
qui teste si un process existe puis le tuer .
Apres avoir fait ps aux|grep proc_a_tuer
comment savoir si le process existe et comment récupérer l'id ?
bonjour , je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure qui teste si un process existe puis le tuer . Apres avoir fait ps aux|grep proc_a_tuer comment savoir si le process existe et comment récupérer l'id ?
Avec pgrep. Par exemple pour récupérer les ID des processes dont le nom contien "firefox", alors c'est:
# pgrep firefox
Comme j'ai plein de firefox allumés, alors j'ai le résultat sur plusieurs lignes (un PID par ligne).
C'est à toi de faire une boucle while ou for pour gérer la chose, en fonction du shell que tu utilise.
bonjour ,
je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure
qui teste si un process existe puis le tuer .
Apres avoir fait ps aux|grep proc_a_tuer
comment savoir si le process existe et comment récupérer l'id ?
Avec pgrep.
Par exemple pour récupérer les ID des processes dont le nom contien
"firefox", alors c'est:
# pgrep firefox
Comme j'ai plein de firefox allumés, alors j'ai le résultat sur plusieurs
lignes (un PID par ligne).
C'est à toi de faire une boucle while ou for pour gérer la chose, en
fonction du shell que tu utilise.
bonjour , je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure qui teste si un process existe puis le tuer . Apres avoir fait ps aux|grep proc_a_tuer comment savoir si le process existe et comment récupérer l'id ?
Avec pgrep. Par exemple pour récupérer les ID des processes dont le nom contien "firefox", alors c'est:
# pgrep firefox
Comme j'ai plein de firefox allumés, alors j'ai le résultat sur plusieurs lignes (un PID par ligne).
C'est à toi de faire une boucle while ou for pour gérer la chose, en fonction du shell que tu utilise.
je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure qui teste si un process existe puis le tuer . Apres avoir fait ps aux|grep proc_a_tuer comment savoir si le process existe et comment récupérer l'id ?
D'abord, il faut bien se rendre compte qu'entre le moment où on trouve le pid d'un processus, et le moment où on le tue, ce processus peut trés bien se terminer et un autre prendre sa place. (Improbable, mais possible, sur une marchine surchargée par exemple).
La seule manière d'envoyer un signal à un processus en étant sûr de l'identité du processus, AMC, est d'avoir un pipe ouvert avec ce processus, et de le fermer. Alors lorsque ce processus effectuera un read sur ce pipe, il recevra un SIGPIPE, ce qui peut le tuer s'il s'est configuré ansi.
Ensuite, il faut faire attention comment on défini "proc_a_tuer" pour grep.
On obtient de toutes sortes de processus: - des processus nous appartenant éxecutant un fichier nommé "bash"; - des processus ne nous appartenant pas éxecutant un fichier nommé "bash"; - des processus utilisant un fichier nommé "bash"; - le processus grep lui-même; - etc.
C'est un peu le bordel.
Pour le processus grep lui-même, il y a un truc qui permet de l'éviter: utiliser une regexp qui ne se reconnait pas elle-même.
ps aux|grep -e '[b]ash'
par exemple.
Pour éviter les processus utilisant un fichier de même nom, on peut utiliser killproc(8), auquel on passe le chemin absolu de l'exécutable, mais ça n'aide pas pour les processus multiple.
Noter ce "BUG" de killproc:
Identifying a process based on the executable file and the corre sponding inode number only works if the process stays alive dur ing killproc's execution. Impure executables like shell scripts (the inode number of the shell is not identical to that of the script) and programs rewriting their zeroth argument may not be identified by a file name.
Enfin, à défaut de killproc, on peut y aller bourrin et tout tuer:
kill $(ps aux|awk '/[b]ash/{print $2}')
(ou bien, lire man cut, et utiliser grep et cut à la place de awk).
-- __Pascal Bourguignon__ http://www.informatimago.com/ Our enemies are innovative and resourceful, and so are we. They never stop thinking about new ways to harm our country and our people, and neither do we. -- Georges W. Bush
fembe <fembe@hotmail.com> writes:
je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure
qui teste si un process existe puis le tuer .
Apres avoir fait ps aux|grep proc_a_tuer
comment savoir si le process existe et comment récupérer l'id ?
D'abord, il faut bien se rendre compte qu'entre le moment où on trouve
le pid d'un processus, et le moment où on le tue, ce processus peut
trés bien se terminer et un autre prendre sa place. (Improbable, mais
possible, sur une marchine surchargée par exemple).
La seule manière d'envoyer un signal à un processus en étant sûr de
l'identité du processus, AMC, est d'avoir un pipe ouvert avec ce
processus, et de le fermer. Alors lorsque ce processus effectuera un
read sur ce pipe, il recevra un SIGPIPE, ce qui peut le tuer s'il
s'est configuré ansi.
Ensuite, il faut faire attention comment on défini "proc_a_tuer" pour
grep.
On obtient de toutes sortes de processus:
- des processus nous appartenant éxecutant un fichier nommé "bash";
- des processus ne nous appartenant pas éxecutant un fichier nommé "bash";
- des processus utilisant un fichier nommé "bash";
- le processus grep lui-même;
- etc.
C'est un peu le bordel.
Pour le processus grep lui-même, il y a un truc qui permet de
l'éviter: utiliser une regexp qui ne se reconnait pas elle-même.
ps aux|grep -e '[b]ash'
par exemple.
Pour éviter les processus utilisant un fichier de même nom, on peut
utiliser killproc(8), auquel on passe le chemin absolu de
l'exécutable, mais ça n'aide pas pour les processus multiple.
Noter ce "BUG" de killproc:
Identifying a process based on the executable file and the corre
sponding inode number only works if the process stays alive dur
ing killproc's execution. Impure executables like shell scripts
(the inode number of the shell is not identical to that of the
script) and programs rewriting their zeroth argument may not be
identified by a file name.
Enfin, à défaut de killproc, on peut y aller bourrin et tout tuer:
kill $(ps aux|awk '/[b]ash/{print $2}')
(ou bien, lire man cut, et utiliser grep et cut à la place de awk).
--
__Pascal Bourguignon__ http://www.informatimago.com/
Our enemies are innovative and resourceful, and so are we. They never
stop thinking about new ways to harm our country and our people, and
neither do we. -- Georges W. Bush
je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure qui teste si un process existe puis le tuer . Apres avoir fait ps aux|grep proc_a_tuer comment savoir si le process existe et comment récupérer l'id ?
D'abord, il faut bien se rendre compte qu'entre le moment où on trouve le pid d'un processus, et le moment où on le tue, ce processus peut trés bien se terminer et un autre prendre sa place. (Improbable, mais possible, sur une marchine surchargée par exemple).
La seule manière d'envoyer un signal à un processus en étant sûr de l'identité du processus, AMC, est d'avoir un pipe ouvert avec ce processus, et de le fermer. Alors lorsque ce processus effectuera un read sur ce pipe, il recevra un SIGPIPE, ce qui peut le tuer s'il s'est configuré ansi.
Ensuite, il faut faire attention comment on défini "proc_a_tuer" pour grep.
On obtient de toutes sortes de processus: - des processus nous appartenant éxecutant un fichier nommé "bash"; - des processus ne nous appartenant pas éxecutant un fichier nommé "bash"; - des processus utilisant un fichier nommé "bash"; - le processus grep lui-même; - etc.
C'est un peu le bordel.
Pour le processus grep lui-même, il y a un truc qui permet de l'éviter: utiliser une regexp qui ne se reconnait pas elle-même.
ps aux|grep -e '[b]ash'
par exemple.
Pour éviter les processus utilisant un fichier de même nom, on peut utiliser killproc(8), auquel on passe le chemin absolu de l'exécutable, mais ça n'aide pas pour les processus multiple.
Noter ce "BUG" de killproc:
Identifying a process based on the executable file and the corre sponding inode number only works if the process stays alive dur ing killproc's execution. Impure executables like shell scripts (the inode number of the shell is not identical to that of the script) and programs rewriting their zeroth argument may not be identified by a file name.
Enfin, à défaut de killproc, on peut y aller bourrin et tout tuer:
kill $(ps aux|awk '/[b]ash/{print $2}')
(ou bien, lire man cut, et utiliser grep et cut à la place de awk).
-- __Pascal Bourguignon__ http://www.informatimago.com/ Our enemies are innovative and resourceful, and so are we. They never stop thinking about new ways to harm our country and our people, and neither do we. -- Georges W. Bush
JustMe
R12y avait écrit le 10/04/2006 :
On Mon, 10 Apr 2006 17:06:40 +0000, fembe wrote:
bonjour , je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure qui teste si un process existe puis le tuer . Apres avoir fait ps aux|grep proc_a_tuer comment savoir si le process existe et comment récupérer l'id ?
Avec pgrep. Par exemple pour récupérer les ID des processes dont le nom contien "firefox", alors c'est:
# pgrep firefox
Comme j'ai plein de firefox allumés, alors j'ai le résultat sur plusieurs lignes (un PID par ligne).
C'est à toi de faire une boucle while ou for pour gérer la chose, en fonction du shell que tu utilise.
killall firefox
:-D
R12y avait écrit le 10/04/2006 :
On Mon, 10 Apr 2006 17:06:40 +0000, fembe wrote:
bonjour ,
je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure
qui teste si un process existe puis le tuer .
Apres avoir fait ps aux|grep proc_a_tuer
comment savoir si le process existe et comment récupérer l'id ?
Avec pgrep.
Par exemple pour récupérer les ID des processes dont le nom contien
"firefox", alors c'est:
# pgrep firefox
Comme j'ai plein de firefox allumés, alors j'ai le résultat sur plusieurs
lignes (un PID par ligne).
C'est à toi de faire une boucle while ou for pour gérer la chose, en
fonction du shell que tu utilise.
bonjour , je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure qui teste si un process existe puis le tuer . Apres avoir fait ps aux|grep proc_a_tuer comment savoir si le process existe et comment récupérer l'id ?
Avec pgrep. Par exemple pour récupérer les ID des processes dont le nom contien "firefox", alors c'est:
# pgrep firefox
Comme j'ai plein de firefox allumés, alors j'ai le résultat sur plusieurs lignes (un PID par ligne).
C'est à toi de faire une boucle while ou for pour gérer la chose, en fonction du shell que tu utilise.
killall firefox
:-D
Damien Wyart
* R12y in fr.comp.os.unix:
Avec pgrep. Par exemple pour récupérer les ID des processes dont le nom contien "firefox", alors c'est:
# pgrep firefox
Comme j'ai plein de firefox allumés, alors j'ai le résultat sur ^^^^^^^
Firefox = sapin de Noël ?? ;-)
plusieurs lignes (un PID par ligne).
C'est à toi de faire une boucle while ou for pour gérer la chose, en fonction du shell que tu utilise.
Ou utiliser pkill, un copain de pgrep...
-- DW
* R12y <mihamina.rakotomandimby@etu.univ-orleans.fr> in fr.comp.os.unix:
Avec pgrep.
Par exemple pour récupérer les ID des processes dont le nom contien
"firefox", alors c'est:
# pgrep firefox
Comme j'ai plein de firefox allumés, alors j'ai le résultat sur
^^^^^^^
Firefox = sapin de Noël ?? ;-)
plusieurs lignes (un PID par ligne).
C'est à toi de faire une boucle while ou for pour gérer la chose, en
fonction du shell que tu utilise.
Enfin, à défaut de killproc, on peut y aller bourrin et tout tuer:
kill $(ps aux|awk '/[b]ash/{print $2}')
(ou bien, lire man cut, et utiliser grep et cut à la place de awk).
Un truc comme
awk '$11 ~ /(^|[-/])bash$/{print $2}'
est moins bourrin... -- Jacques L'helgoualc'h
Stephane Chazelas
On Mon, 10 Apr 2006 17:17:50 +0200, Pascal Bourguignon wrote:
fembe writes:
je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure qui teste si un process existe puis le tuer . Apres avoir fait ps aux|grep proc_a_tuer comment savoir si le process existe et comment récupérer l'id ?
D'abord, il faut bien se rendre compte qu'entre le moment où on trouve le pid d'un processus, et le moment où on le tue, ce processus peut trés bien se terminer et un autre prendre sa place. (Improbable, mais possible, sur une marchine surchargée par exemple).
La seule manière d'envoyer un signal à un processus en étant sûr de l'identité du processus, AMC, est d'avoir un pipe ouvert avec ce processus, et de le fermer. Alors lorsque ce processus effectuera un read sur ce pipe, il recevra un SIGPIPE, ce qui peut le tuer s'il s'est configuré ansi. [...]
Non, c'est quand on ecrit sur un pipe mort qu'on prend un SIGPIPE, pas quand on lit. Quand on lit, le read() renvoie juste le nombre d'octets qui restent dans le pipe (0 indiquant un end-of-file s'il n'y en a plus).
En pratique, personne ne prend la peine de contourner ce probleme tellement il est improbable. Meme les outils standards qui se basent sur /var/run/<whatever>.pid et pkill/killall, supposent qu'il est impossible qu'un <pid> soit reutilisé entre l'execution d'un ps (ou un stat("/proc/<pid>/cmdline")) et le kill(<pid>) qui vient juste apres (voir meme pour certains qu'un <pid> soit reutilisé tout court).
-- Stephane
On Mon, 10 Apr 2006 17:17:50 +0200, Pascal Bourguignon wrote:
fembe <fembe@hotmail.com> writes:
je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure
qui teste si un process existe puis le tuer .
Apres avoir fait ps aux|grep proc_a_tuer
comment savoir si le process existe et comment récupérer l'id ?
D'abord, il faut bien se rendre compte qu'entre le moment où on trouve
le pid d'un processus, et le moment où on le tue, ce processus peut
trés bien se terminer et un autre prendre sa place. (Improbable, mais
possible, sur une marchine surchargée par exemple).
La seule manière d'envoyer un signal à un processus en étant sûr de
l'identité du processus, AMC, est d'avoir un pipe ouvert avec ce
processus, et de le fermer. Alors lorsque ce processus effectuera un
read sur ce pipe, il recevra un SIGPIPE, ce qui peut le tuer s'il
s'est configuré ansi.
[...]
Non, c'est quand on ecrit sur un pipe mort qu'on prend un
SIGPIPE, pas quand on lit. Quand on lit, le read() renvoie
juste le nombre d'octets qui restent dans le pipe (0 indiquant
un end-of-file s'il n'y en a plus).
En pratique, personne ne prend la peine de contourner ce
probleme tellement il est improbable. Meme les outils standards
qui se basent sur /var/run/<whatever>.pid et pkill/killall,
supposent qu'il est impossible qu'un <pid> soit reutilisé entre
l'execution d'un ps (ou un stat("/proc/<pid>/cmdline")) et le
kill(<pid>) qui vient juste apres (voir meme pour certains qu'un
<pid> soit reutilisé tout court).
On Mon, 10 Apr 2006 17:17:50 +0200, Pascal Bourguignon wrote:
fembe writes:
je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure qui teste si un process existe puis le tuer . Apres avoir fait ps aux|grep proc_a_tuer comment savoir si le process existe et comment récupérer l'id ?
D'abord, il faut bien se rendre compte qu'entre le moment où on trouve le pid d'un processus, et le moment où on le tue, ce processus peut trés bien se terminer et un autre prendre sa place. (Improbable, mais possible, sur une marchine surchargée par exemple).
La seule manière d'envoyer un signal à un processus en étant sûr de l'identité du processus, AMC, est d'avoir un pipe ouvert avec ce processus, et de le fermer. Alors lorsque ce processus effectuera un read sur ce pipe, il recevra un SIGPIPE, ce qui peut le tuer s'il s'est configuré ansi. [...]
Non, c'est quand on ecrit sur un pipe mort qu'on prend un SIGPIPE, pas quand on lit. Quand on lit, le read() renvoie juste le nombre d'octets qui restent dans le pipe (0 indiquant un end-of-file s'il n'y en a plus).
En pratique, personne ne prend la peine de contourner ce probleme tellement il est improbable. Meme les outils standards qui se basent sur /var/run/<whatever>.pid et pkill/killall, supposent qu'il est impossible qu'un <pid> soit reutilisé entre l'execution d'un ps (ou un stat("/proc/<pid>/cmdline")) et le kill(<pid>) qui vient juste apres (voir meme pour certains qu'un <pid> soit reutilisé tout court).
-- Stephane
totof2000
l'option -o de ps est bien pratique aussi ... ps -e -o pid -o command
l'option -o de ps est bien pratique aussi ...
ps -e -o pid -o command