Comment pourrais-je écrire un script Bash qui exécute un programme de longue durée et stocke l'ID de processus des programmes dans un fichier séparé?
Je veux quelque chose comme
#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file
Cependant, faire exactement cela exécuterait l' outilps
après la fin.
Existe-t-il un moyen d'obtenir l'ID de processus du processus créé?
long_running_tool
processus. Par conséquent, exec ne revient jamais et la ligne suivante n'est jamais atteinte. Voirhelp exec
,execve(2)
.Réponses:
Vous pouvez facilement exécuter le processus en arrière-plan avec "&", puis obtenir le PID du processus en arrière-plan en utilisant "$!"
Ensuite, facultativement, attendez $! si vous voulez que le shell se bloque jusqu'à la fin de l'exécution du processus.
la source
Comme mentionné précédemment,
exec
remplacebash
par le programme spécifié, en conservant le PID.la source