C语言 有没有一个函数可以终止程序而不等待子程序执行?

vwkv1x7d  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(143)

目标是允许子分支执行1秒,如果超过1秒,程序应该终止(当然,如果执行时间少于1秒,它会立即执行),我当前执行的parent分支如下所示:

int ret;

if (waitpid(pid, &ret, WNOHANG) == 0) {
    sleep(1);
    if (waitpid(pid, &ret, WNOHANG) == 0) {
        kill(pid, SIGKILL);
    }
}

if(WIFEXITED(ret) && WEXITSTATUS(ret) == 1){
    printf("*** Command not found: %s\n", args[0]);
}else{
    //print error message
}

但是,waitpid()WNOHANG返回0(无论命令是什么)。并且程序最终总是等待1秒。是否有命令可以替换这个waitpid()?如果没有,我该怎么做才能实现我想要实现的目标?

vlurs2pr

vlurs2pr1#

使用SIGALRM怎么样?
编制:

$ gcc alarm.c -o alarm && ./alarm
alarm.c: In function 'main':
alarm.c:28:5: warning: implicit declaration of function 'waitpid' [-Wimplicit-function-declaration]
     waitpid(pid, &status, 0);
     ^
waiting for child
child working
child working
child working
child working
done waiting for child

相关问题