PID, созданный с помощью system()
Я новичок в убунту. Я создаю программу с открытием 2/4/8 нового процесса в отдельных терминалах. Использование системы (). Как я могу получить PID из них или изменить приятное значение, используя другой терминал?
1 ответ
Решение
В общем-то pidof(8)
и в более сложных случаях pgrep(1)
являются отличными инструментами, чтобы найти идентификатор некоторых процессов.
Если вы хотите найти всех детей определенного процесса, вам нужно покопаться в /proc
файловая система самостоятельно. Предположим, вы ищете детей процесса 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
Если вы решили использовать
system("foobar");
вместо
if (fork() == 0) {
execlp("foobar", "foobar", NULL);
}
это фактически вызовет два процесса: /bin/sh
как прямой ребенок и foobar
как внук