c - 如何离开(中断)waitpid()函数?

标签 c shell unix wait waitpid

目前我正在编写一个 shell,我为我的子进程使用 waitpid() 函数。

我还安装了一个信号处理程序,这样我就可以捕获 SIGINT (CTRL+C) 信号。

所以我现在想要的是当有人按下 SIGINT (CTRL+C) 信号时它应该离开 waitpid() 函数并且像往常一样继续。

我正在寻找可以帮助我的功能。

最佳答案

安装您的信号处理程序 SA_RESTART 标志:

void handler( int sig, siginfo_t *si, void *arg )
{
    ...
}

...

struct sigaction newact;
memset( &newact, 0, sizeof( newact ) );
sigemptyset( &newact.sa_mask );
newact.sa_flags = SA_SIGINFO;  // note that **lack** of SA_RESTART
newact.sa_siginfo = handler;

sigaction( SIGINT, &newact, NULL );

您必须为其添加错误检查,并注意您现在必须在代码中处理中断的调用。

关于c - 如何离开(中断)waitpid()函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50425827/

相关文章:

python - 将命令行输出写入文件

c++ - 将 SSE 内在函数转换为可读的 C/C++ 代码?

c - MessageBox 在处理来自 DialogBox 的 WM_DESTROY 事件时不起作用

c - 在纯 C 中打开一个 Unicode 文件

bash - 无法捕获 `/bin/sh`的退出代码

shell - 在脚本因失败退出之前立即运行命令

c - 字符串格式 %80[^,] 在 C 中是什么意思?

sql - 从 PL/SQL 调用 shell 脚本,但 shell 以网格用户而不是 oracle 的身份执行

ruby - 如何清理 shell 命令并在 Ruby 中获取输出?

bash - 不使用rm命令递归删除目录