1: сон, поскольку я знаю, что сон в процессе будет прерван любыми сигналами, посланными его процессу.это правильно?
Это будет прервано, если конкретный сигнал не будет проигнорирован или заблокирован с помощью sigprocmask
.
2: все ещеSleep, если я создаю несколько потоков в процессе, и я вставляю функции Sleep в потоки, а затем, если я отправляю сигналы в процесс, будет ли сон прерываться?
Только один поток получаетсигнал посылается процессу, даже если в этом процессе есть несколько потоков, у которых этот сигнал разблокирован.См. Основные понятия сигнала для получения более подробной информации.Стандартный способ обработки сигналов в многопоточном процессе - блокировать все сигналы во всех потоках, кроме того, который обрабатывает сигналы (обычно это основной поток).
Кстати: если я отправляюсигнал процессу, когда процесс получит сигнал, отправит ли он своим дочерним потокам?
Не будет.
Однако, если процесс является сеансовой группойлидер, управляющий терминалом, его группа получит сигнал SIGHUP
, когда лидер сеанса завершит работу.Кроме того, когда группа процессов становится осиротевшей, ее процессы отправляются SIGHUP
, за которыми следует SIGCONT
.