Команда Trap из программы на C?

Я хотел бы запустить trap '' 2 команда из программы на C, чтобы предотвратить ctrl-c когда a.out это запустить.

#define TRAP "trap '' 2"

int     main()
{
    system(TRAP);

    ...
}

Я могу заставить его работать от .sh файл, который также запускает программу, но я хотел бы, чтобы все было в одном .c файл.

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

Я тогда попытался сделать другой .c файл, который запускает скрипт, затем запустите первый a.out как я думал, что это был вопрос времени в первый раз, но безуспешно...

Как я могу заставить его работать в течение одного a.out или это вообще возможно?

1 ответ

Решение

trap '' INT игнорируемых SIGINT, Игнорировать диспозиции наследуются дочерним процессам, поэтому:

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

игнорируемых SIGINT за что следует, но это не может работать в иерархии процессов.

К счастью это не супер трудно игнорировать SIGINT из С.

#include <signal.h>
int main()
{
   //....
   signal(SIGINT,SIG_IGN); // `trap '' INT` in C
   //^should never fail unless the args are buggy
   //...
}
Другие вопросы по тегам