Chaque processus sera répertorié dans la sortie de ps aux
; que ce soit en cours d'exécution, en dormant, zombie ou arrêté.
Cependant, dans votre cas, puisque vous avez exécuté le processus en utilisant sh abc.sh
, sh
l’application (shell) est en cours d’exécution et non abc.sh
. Par conséquent, ps aux
ne contiendra pas le processus en abc.sh
raison de ce qui grep
ne pourrait donner aucun résultat.
Donc, la bonne façon de l’utiliser est la suivante:
ps aux | grep sh
Cela peut également vous renvoyer d'autres processus en cours d'exécution ayant la chaîne sh
n'importe où dans leur sortie ps aux
.
Vous devez noter que le processus sera "en cours d'exécution" lorsque la sortie de ps aux
aura son STAT
as R
. S'il s'agit de quelque chose d'autre, il ne s'exécute pas sur l'instance à laquelle vous avez lancé la commande pour vérifier les processus en cours. Les différents états de processus sont disponibles dans la page de manuel de ps:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is being traced
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
Vous pouvez également exécuter la top
commande pour vérifier si le processus est en cours d'exécution ou en veille, ainsi que la quantité de CPU et de RAM qu'il consomme. (Ceci listera à nouveau votre processus en tant que sh
).
Toutefois, si vous souhaitez que votre processus soit répertorié sous la forme abc.sh
, la première ligne du script que vous exécutez doit être la suivante:
#!/bin/sh
afin que le shell sache quelle application utiliser pour exécuter le script (sh dans ce cas, changez-le #!/bin/bash
pour bash), puis fournira des autorisations exécutables au processus en utilisant:
chmod +x /path/to/abc.sh
en remplaçant /path/to/
par l’emplacement du abc.sh
fichier puis en abc.sh
utilisant
/path/to/abc.sh
en remplaçant de nouveau /path/to/
par l'emplacement du abc.sh
fichier.
S+
signifieps aux | grep filename
commande.Mon problème avec
grep
est que c'est un analyseur de ligne entière. Dans votre exemple, vous recherchez "abc" mais vous retirez l'instance degrep
(c'est-à-dire "abc"). Un peu circulaire. Vous pouvez filtrer cela, mais je trouve tout cela un peu pervers.Je me tournerais vers
awk
pour un peu de panache.awk
divise les lignes en champs en fonction des espaces (par défaut). Les champs $ 11 + sont la ou les colonnes de commande, donc si la commande est "sh abc.sh ...",$11
serash
et$12
seraabc.sh
.Si vous souhaitez contrôler la sortie ou la chaîne avec Bash's
&&
et les||
opérateurs, vous pouvez le faire, mais vous devrez être un peu plus intelligent.grep
sortira avec le code d'état 1 (défaillance technique, déclencheurs||
) si rien n'est trouvé maisawk
sortira toujours du code 0. Nous pouvons le changer en lui disant de quitter s'il trouve quelque chose et de jeter un 1 s'il ne le fait pas:Bien sûr, si vous vous souciez d'écrire les résultats à l'écran, vous pouvez le faire de la même manière
awk
:la source
La bonne façon de vérifier dans la session bash en cours si un processus démarré en arrière-plan, comme par exemple
sh abc.sh &
, est déjà en cours d'exécution ou non, consiste à utiliser lajobs
commande intégrée.Exemple:
Cela signifie que le
sh abc.sh
processus démarré en arrière-plan est en cours d'exécution. Si le processus est terminé, vous verrez quelque chose comme:Si plusieurs processus s'exécutent en arrière-plan, vous pouvez limiter la sortie au
sh abc.sh
processus uniquement à l' aide de:Voir
help jobs
pour plus d'informations.La méthode ci-dessus ne fonctionnera que dans la session en cours de bash. Mais si vous êtes dans une autre session bash (par exemple dans une autre fenêtre de terminal ou un autre onglet, ou dans un script), mis à part:
vous pouvez aussi utiliser:
ce qui me semble plus simple. Si vous voyez votre commande dactylographiée dans le résultat (
sh abc.sh
dans ce cas), cela signifie que le processus est toujours en cours d'exécution. Sinon, le processus est terminé.la source
Si votre script est en cours d'exécution, il doit être affiché par
ps aux
commande. S'il ne s'affiche pasps
, il se peut que l'exécution du script soit actuellement terminée.La sortie de
ps
ce type signifie que votre script n'est pas en cours d'exécution,Si tel est le cas, cela signifie que votre script est en cours d'exécution.
Tout est basé sur le contenu du script.
Par exemple, si vous créez un script comme celui-ci. Il affiche le message HI lors de l'exécution. Il faut quelques secondes pour afficher la sortie et se terminer après avoir généré le résultat final.
Mais si votre script ressemble à ça,
Il faut quelques minutes pour que le processus soit terminé. En attendant, si vous exécutez la
ps aux | grep filename
commande, elle sera affichée sur la sortie. Parce que le script est en cours d'exécution.la source
si vous voulez vérifier tous les processus, utilisez 'top'
si vous voulez connaître les processus exécutés par Java, utilisez
ps -ef | grep java
si un autre processus, utilisez
ps -ef | grep xyz
simplement ou simplement/etc/init.d xyz status
si à travers un code comme
.sh
alors./xyz.sh status
la source
si vous voulez simplement vérifier s'il y a un processus en cours, accédez à ce répertoire et tapez
ll -tr
si vous voyez.csv
ou.work
etc. à la fin du fichier, cela signifie que processus est en cours sinon, pas.la source
.csv
concerne les fichiers délimités par des virgules qui ne sont pas liés à un processus en cours d'exécution.