【问题标题】:Trap command from C program? [duplicate]来自C程序的陷阱命令? [复制]
【发布时间】:2018-12-29 10:44:51
【问题描述】:

我想从 C 程序运行 trap '' 2 命令,以在运行 a.out 时阻止 ctrl-c

#define TRAP "trap '' 2"

int     main()
{
    system(TRAP);

    ...
}

我可以从同样运行程序的.sh 文件中使其工作,但我希望所有内容都在一个.c 文件中。

trap '' 2
cd /Users/me
./a.out

然后我尝试创建另一个运行脚本的.c 文件,然后启动第一个a.out,因为我认为这是第一次没有成功的时间问题...

我怎样才能让它在单个 a.out 中工作,或者这甚至可能吗?

【问题讨论】:

  • trap 命令内置于 shell 本身,只影响当前运行的 shell,不影响其他进程。如果您想防止 Ctrl-C 破坏您的程序(通常是个坏主意),请查看 signalsSIGBREAK

标签: c shell bash-trap


【解决方案1】:

trap '' INT 忽略 SIGINT。忽略处置被继承到子进程,所以:

trap '' 2
cd /Users/me
./a.out

忽略SIGINT 后面的内容,但它无法处理流程层次结构。

幸运的是,从 C 中忽略 SIGINT 并不是很困难。

#include <signal.h>
int main()
{
   //....
   signal(SIGINT,SIG_IGN); // `trap '' INT` in C
   //^should never fail unless the args are buggy
   //...
}

【讨论】:

    猜你喜欢
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2015-06-06
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多