reiniciar procesos proceso monitoreo identificador hijos ejemplos crear como arbol linux shell process child-process

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 ).