¿Cómo podría escribir un script Bash que ejecute un programa de larga ejecución y almacene la identificación del proceso de los programas en un archivo separado?
Quiero algo como
#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file
Sin embargo, hacer exactamente esto ejecutaría la herramienta unaps
vez que haya terminado.
¿Hay alguna manera de obtener la identificación del proceso creado?
long_running_tool
proceso. En consecuencia, exec nunca regresa y nunca se alcanza la siguiente línea. Verhelp exec
,execve(2)
.Respuestas:
Puede ejecutar fácilmente el proceso en segundo plano con "&", luego obtener el PID del proceso en segundo plano usando "$!"
Entonces, opcionalmente, ¡espera $! si desea que el shell se bloquee hasta que el proceso complete la ejecución.
fuente
Como se mencionó anteriormente,
exec
reemplazabash
con el programa especificado, conservando el PID.fuente