que pthread procesos pid_t hilos arbol c process fork

c - pthread - pid_t que es



¿Cómo encontrar el número de hijos de un proceso en C? (4)

No hay forma de enumerar todos los elementos secundarios de un proceso, excepto al enumerar todos los procesos del sistema y verificar su PPID. (Por supuesto, desde el propio padre, puede hacer un seguimiento de lo que está bifurcando). No hay manera de enumerar a todos los descendientes de un proceso: si P se divide en Q, se bifurca R y luego Q muere, no hay más información relacionar P con R.

La forma portátil de obtener información sobre los procesos es llamar a la utilidad ps y analizar su resultado.

Si desea limitar el número de descendientes de un proceso, puede hacerlo fácilmente utilizando un usuario dedicado para ejecutar ese proceso y comenzando el antecesor con el límite deseado de procesos por usuario ( setrlimit(RLIMIT_NRPROC, …) ).

También puede usar un recurso compartido de algún tipo; esto funcionará siempre que los procesos descendientes no cierren ese recurso. Por ejemplo, puede abrir un archivo (sin el indicador O_CLOEXEC ), si los descendientes no llaman a fcntl con el indicador FD_CLOEXEC en ese archivo ni simplemente ir y cerrarlo. Creo que en OSX necesitarás tenedor fuser o lsof (o funcionará también en Linux) para averiguar cuántos procesos tiene el archivo abierto, no sé de una manera de hacerlo sin bifurcar en OSX. Puede investigar otros mecanismos como la memoria compartida ( shm_open y amigos) o las asignaciones de memoria ( mmap y amigos), pero para estos no sé de una manera de obtener el recuento de uso sin bifurcación tampoco.

Estoy haciendo un montón de bifurcaciones en un proceso (y los hijos de ese proceso están bifurcando más), y quiero mantener un límite aceptable en la cantidad total de procesos que creo.

¿Hay alguna manera (preferiblemente eficiente) de encontrar el número total de niños de un proceso (incluidos niños de niños, niños de niños de niños, etc.) de C?

Me gustaría que mi código funcione tanto en Linux como en Mac, así que no me temo que /proc !


No hay una API portátil que hacer, lo que estás pidiendo. C ni siquiera define el concepto de procesos y las API de gestión de procesos de un sistema operativo son muy específicas y generalmente no son portátiles.

O bien encuentra una biblioteca de abstracción portátil para lo que quiere hacer, o la implementa usted mismo.


Puede abrir una tubería o un zócalo en el proceso raíz y hacer que cada niño escriba en él cuando se crean y cuando salen. Si desea limitar la cantidad total de procesos descendientes, puede hacer que los niños verifiquen con el proceso raíz antes de que se bifurquen, en lugar de notificarlo después.


revisa esto si puede crear una variable compartida entre todos los procesos, puede monitorear el número de procesos en función de ese valor de contador compartido.
incluso esta respuesta puede ayudarte a crear una variable compartida.