Цель этого - временно изменить действие для SIGTSTP
, а затем восстановить его обратно.
sigaction(SIGTSTP, &rien, &old_handler);
устанавливает для него действие по умолчанию и сохраняет предыдущее действие в old_handler
.
Затем он отправляет себе сигнал SIGSTOP
, чтобы фактически приостановить процесс.
Когда это возвращается, это означает, что процесс был продолжен, поэтому он возвращает старое действие с помощью:
sigaction(SIGTSTOP, &old_handler, NULL);
Пока не ясно, зачем это нужно. Было бы более разумно, если бы он приостановил процесс, отправив сигнал SIGTSTP
вместо SIGSTOP
. В этом случае ему нужно установить действие по умолчанию, в противном случае оно будет повторяться бесконечно.