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 как внук

Другие вопросы по тегам