linux - procesos - Cómo obtener un proceso hijo desde el proceso principal
procesos en linux ejemplos (6)
¿Es posible obtener el id. De proceso hijo del ID del proceso principal en el script de shell?
Tengo un archivo para ejecutar usando el script de shell, que conduce a un nuevo proceso process1 (proceso principal). Este proceso1 ha bifurcado otro proceso process2 (proceso hijo). Usando script, puedo obtener el pid de process1 usando el comando:
cat /path/of/file/to/be/executed
pero no puedo obtener el pid del proceso hijo.
No estoy seguro si te entiendo correctamente, ¿esto ayuda?
ps --ppid <pid of the parent>
Solo usa :
pgrep -P $your_process1_pid
Escribí un registro para obtener todos los procesos pids de un proceso principal. Aquí está el código. Espero que ayude.
function getcpid() {
cpids=`pgrep -P $1|xargs`
# echo "cpids=$cpids"
for cpid in $cpids;
do
echo "$cpid"
getcpid $cpid
done
}
getcpid $1
ps -axf | grep parent_pid
El comando anterior imprime los procesos respectivos generados desde parent_pid
, espero que ayude. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
root@root:~/chk_prgrm/lp#
parent...18685
child... 18686
root@root:~/chk_prgrm/lp# ps axf | grep frk
18685 pts/45 R 0:11 | /_ ./frk
18686 pts/45 R 0:11 | | /_ ./frk
18688 pts/45 S+ 0:00 | /_ grep frk
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
// Create a child process
int pid = fork();
if (pid > 0)
{
int j=getpid();
printf("in parent process %d/n",j);
}
// Note that pid is 0 in child process
// and negative if fork() fails
else if (pid == 0)
{
int i=getppid();
printf("Before sleep %d/n",i);
sleep(5);
int k=getppid();
printf("in child process %d/n",k);
}
return 0;
}
El proceso de shell es $$
ya que es un parámetro especial
En Linux, el sistema de archivos proc (5) proporciona mucha información sobre los procesos. Quizás pgrep (1) (que accede /proc
) también podría ayudar.
Por lo tanto, pruebe cat /proc/$$/status
para obtener el estado del proceso de shell.
Por lo tanto, su id. De proceso principal podría recuperarse con, por ejemplo,
parpid=$(awk ''/PPid:/{print $2}'' /proc/$$/status)
Luego use $parpid
en su script para referirse al proceso padre pid (el padre del shell).
¡Pero no creo que lo necesites!
Lea algunos Bash Guide (o con precaución avanzada bash scripting guide , que tiene errores) y programación avanzada de Linux .
Observe que algunos procesos de daemon de servidor (que generalmente deben ser únicos) escriben explícitamente sus pid en /var/run
, por ejemplo, el daemon del servidor sshd
escribe su pid en el archivo textual /var/run/sshd.pid
). Es posible que desee agregar dicha función en sus propios programas tipo servidor (codificados en C, C ++, Ocaml, Go, Rust o algún otro lenguaje compilado ).