通过信号挂起和恢复进程
Suspend and resume process via signals
我这里有两个problems/questions!
1) 我试图抓住 CTRL+Z
并处理它但没有任何反应!!
2) 我如何测试 SIGCONT? (它没有像 CTRL+ .. 这样的快捷方式)
我的代码有什么问题吗?这是我下面的代码:
void sigstop()
{
printf(" Suspended\n");
}
void sigcont()
{
printf(" Its Back\n");
}
void sigint()
{
printf(" Interrupt\n");
//exit(0);
}
int main(int argc, char **argv){
printf("Starting the program\n");
signal(SIGSTOP,sigstop);
signal(SIGCONT,sigcont);
signal(SIGINT, sigint);
while(1) {
sleep(2);
}
return 0;
}
1) I tried to catch CTRL+Z and handle it but nothing happens!!
CTRL + Z发送SIGTSTP
。因此,您需要为 SIGTSTP
(而不是 SIGSTOP
)设置处理程序。 SIGSTOP
和 SIGKILL
信号无法捕获或处理;所以你的 SIGSTOP
处理程序将被忽略。
2) how can i test the SIGCONT ? (it doesn't have a shortcut like CTRL+ ..)
Shell 通常有一个名为 fg
的内置命令。因此,一旦您使用 CTRL + Z 暂停您的进程,您就可以通过 fg
发送 SIGCONT
。
但是您始终可以使用 shell 内置 kill
(或 kill
命令)向您的进程发送所需的信号。
您的代码中的其他几个问题:
信号函数应该是信号void func(int sig) { .. }
。所以你需要修复你的信号函数。
printf
不是 async-signal-safe,因此不能从信号处理程序中安全地调用它。
我这里有两个problems/questions!
1) 我试图抓住 CTRL+Z
并处理它但没有任何反应!!
2) 我如何测试 SIGCONT? (它没有像 CTRL+ .. 这样的快捷方式)
我的代码有什么问题吗?这是我下面的代码:
void sigstop()
{
printf(" Suspended\n");
}
void sigcont()
{
printf(" Its Back\n");
}
void sigint()
{
printf(" Interrupt\n");
//exit(0);
}
int main(int argc, char **argv){
printf("Starting the program\n");
signal(SIGSTOP,sigstop);
signal(SIGCONT,sigcont);
signal(SIGINT, sigint);
while(1) {
sleep(2);
}
return 0;
}
1) I tried to catch CTRL+Z and handle it but nothing happens!!
CTRL + Z发送SIGTSTP
。因此,您需要为 SIGTSTP
(而不是 SIGSTOP
)设置处理程序。 SIGSTOP
和 SIGKILL
信号无法捕获或处理;所以你的 SIGSTOP
处理程序将被忽略。
2) how can i test the SIGCONT ? (it doesn't have a shortcut like CTRL+ ..)
Shell 通常有一个名为 fg
的内置命令。因此,一旦您使用 CTRL + Z 暂停您的进程,您就可以通过 fg
发送 SIGCONT
。
但是您始终可以使用 shell 内置 kill
(或 kill
命令)向您的进程发送所需的信号。
您的代码中的其他几个问题:
信号函数应该是信号
void func(int sig) { .. }
。所以你需要修复你的信号函数。printf
不是 async-signal-safe,因此不能从信号处理程序中安全地调用它。