* Copyright (c) 2016 Linux Test Project
* Copyright (c) 2025 Ricardo B. Marlière <rbm@suse.com>
*/
* Verify that, pause() returns -1 and sets errno to EINTR after receipt of a
* signal which is caught by the calling process.
*/
#include "tst_test.h"
static void sig_handler(int signal LTP_ATTRIBUTE_UNUSED)
{
}
static void do_child(int signal)
{
SAFE_SIGNAL(signal, sig_handler);
TST_CHECKPOINT_WAKE(0);
TST_EXP_FAIL(pause(), EINTR);
tst_res(TPASS, "Process resumed from pause()");
}
static void run(int signal)
{
int pid;
pid = SAFE_FORK();
if (!pid) {
do_child(signal);
exit(0);
}
TST_CHECKPOINT_WAIT(0);
TST_PROCESS_STATE_WAIT(pid, 'S', 0);
SAFE_KILL(pid, signal);
}
static void run_all(void)
{
run(SIGHUP);
run(SIGINT);
run(SIGQUIT);
run(SIGILL);
run(SIGTRAP);
run(SIGABRT);
run(SIGFPE);
run(SIGSEGV);
run(SIGPIPE);
run(SIGALRM);
run(SIGTERM);
}
static struct tst_test test = {
.forks_child = 1,
.needs_checkpoints = 1,
.test_all = run_all,
};