Geralmente pidof(8)
e em casos mais complicados pgrep(1)
são excelentes ferramentas para encontrar o ID de alguns processos.
Se você quiser encontrar todos os filhos de um processo específico, é necessário pesquisar o sistema de arquivos /proc
. Vamos supor que você esteja procurando os filhos do processo 2345:
for PROCSTAT in /proc/[0-9]*/stat; do
read -r PID PROCNAME STATUS PPID TAIL < $PROCSTAT
if [ $PPID -eq 2345 ]; then
echo $PID
fi
done
Se você optar por usar
system("foobar");
em vez de
if (fork() == 0) {
execlp("foobar", "foobar", NULL);
}
ele realmente gerará dois processos: /bin/sh
como filho direto e foobar
como neto.