comment trouver si un script fonctionne comme un nohup terminé ou non?
J'ai essayé de lancer un script à l'aide de nohup comme,
nohup script.sh &
Quand j'ai essayé
ps -ef | grep "script.sh"
Je ne pouvais pas le trouver là, sauf pour la commande grep qui est en cours d'exécution avec cette chaîne comme paramètre.
Suis-je en train de faire?. Est-ce à dire que le processus a en effet fini de l'exécution?
Merci.
source d'informationauteur learner135
Vous devez vous connecter pour publier un commentaire.
Au début de votre script shell, écrire le PID d'un fichier (par exemple, dans /var/run). Ensuite, vous pouvez simplement recherche pour que le PID de savoir si le processus est fait ou pas. Vous pouvez obtenir le PID de votre script shell en utilisant le haut-
$$
variable.Pour enregistrer le PID, le mettre en haut de votre script:
Ensuite, pour vérifier si il est encore en cours d'exécution:
Vous pourriez ne pas être en mesure d'écrire dans
/var/run
comme un utilisateur normal. Si non, il suffit d'utiliser/tmp
Soumis à nohup mise en œuvre, mais dans la plupart des cas, il fonctionne.
Après l'exécution de
magasin le PID dans une variable. $! est le PID du dernier processus d'arrière-plan.
Ensuite, vous pouvez vérifier si elle est là avec ps ou de le tuer:
À la différence de l'autre solution affiché, cela ne nécessite pas de modification de la script.sh
$! est certainement partie de ksh et ksh93.
va vous montrer ce qu'shell vous êtes en cours d'exécution.
Exemple de l'utilisation raisonnable de &
L'attente déclaration des pauses pour que tout encore en cours d'exécution du processus enfant. Normalement, vous n'avez pas gratter un processus en arrière-plan, s'attendre à toujours courir, puis complètement l'oublier.
Si vous voulez indépendant processus qui s'exécute toujours, pensez à un démon. Certaines personnes écrivent des démons dans le shell - pas de meilleure pratique - mais c'est fait. Normalement UNIX démons sont écrits en C.
Chapitre 13 de Stevens 'Advanced Programming in the UNIx Environment' 2ed est tout au sujet des démons.
J'ai suivi la suggestion de scompt.com modifier mon script pour stocker les
pid
Puis j'ai remarqué que le
pid
est écrit à la sortie, donc il n'y a pas besoin de le stocker:ce qui a fonctionné est
par exemple pour un script nommé "mf-sync.js"
affiche le nom du script et le pid; alors je peux utiliser, par exemple, si pid est 1234
ensuite, j'ai besoin d'ajouter un délai d'attente pour tuer automatiquement après suffisamment de temps s'est écoulé pour qu'il fonctionne normalement, mais c'est une autre question
pendant ce temps je peux garder des enfants de ce processus pour exécuter la synchronisation pour mon client, jusqu'à ce que j'ai le temps de tester le délai d'attente dans un script
Code:
de signaler tous les processus en cours d'exécution.