Вы создаете дополнительных детей при каждом вызове на system("ps -lH")
, и вы также получаете SIGCHLD
уведомления для них.К сожалению, нет никакого способа контролировать, для каких дочерних процессов вы получаете уведомления SIGCHLD
.Это все или ничего.
Для программы, которую вы написали, я бы порекомендовал вам ничего не выбирать: не устанавливать обработчик для SIGCHLD
.Вы можете положиться на уже набранный вами вызов waitpid
, чтобы уведомить вас о завершении созданного вами дочернего процесса.system
позаботится о вызове waitpid
для дочерних процессов, которые он создает;вам не нужно беспокоиться о них.
(Природа "1014 *" "все или ничего" представляет собой серьезную проблему при написании более сложных программ, которым необходимо ожидать комбинаций переменных завершений дочерних процессов и асинхронных "События ввода / вывода, особенно если есть участвующие библиотеки, которые могут создавать дочерние процессы, о которых главный цикл событий не знает. Но не беспокойтесь об этом, пока не доберетесь.)