我编写了一个示例程序来模拟SIGTTIN。它看起来如下:
// Some include files
void sigfn(int num)
{
printf("\n SIGTTIN CAUGHT \n");
}
int main()
{
signal(SIGTTIN , sigfn);
read(0, .., ..);
write(1, .., ..);
return 0;
}
但是当我在前台运行它时,我得到一个输出,它在无限循环中打印以下内容:
SIGTTIN CAUGHT
SIGTTIN CAUGHT
SIGTTIN CAUGHT
SIGTTIN CAUGHT
SIGTTIN CAUGHT
SIGTTIN CAUGHT
SIGTTIN CAUGHT
.
.
.
.
我理解这是因为read是一个阻塞系统调用,但是如何阻止它呢? 我现在正在关闭终端。请帮助我如何阻止它以及为什么这样做。
答案 0 :(得分:1)
#include <stdio.h>
#include <signal.h>
void sigfn(int num){
printf("sigttin");
}
int main(){
char c;
signal(SIGTTIN,sigfn);
read(0,&c,1);
printf("%c\n",c);
return 0;
}
在前台运行时,我没有得到无限循环。它会what it should并阻塞,直到有东西要读。
$ ./sim_ttin
要阻止它(我猜你的意思是kill),只需打开另一个控制台,查找该进程并将其终止。
这就是我所做的: 在一个控制台中:
$。/ sim_ttin&amp; nsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigtt insigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttin
然后我打开另一个控制台并输入:
$ps aux | grep sim_ttin
user 4350 6.0 0.0 1620 340 pts/0 S 22:58 0:00 ./sim_ttin
4350是pid。只是杀了它
$ kill -9 4350
让我们检查第一个控制台:
insigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttinsigttins
[1] +杀死./sim_ttin