当前位置: 技术问答>linux和unix
终端莫名死机(附代码,多进程,有信号)
来源: 互联网 发布时间:2016-01-28
本文导语: 先简单介绍一下,我用的是超级终端和串口1。 代码如下: main() { signal(SIGALRM,poll);//那个信号宏定义忘记怎么写了,是定时信号,错了大家见笑 alarm(1); //后面就是其他的操作了 } void poll(void) { int hand...
先简单介绍一下,我用的是超级终端和串口1。
代码如下:
main()
{
signal(SIGALRM,poll);//那个信号宏定义忘记怎么写了,是定时信号,错了大家见笑
alarm(1);
//后面就是其他的操作了
}
void poll(void)
{
int handle;
handle=open(driver_name,O_RDONLY);
ioctl(handle....);//这里做的事情很多,就是查看芯片的一些状态,大概耗时得半秒
alarm(1);
}
这个时候信号已经被激活了,而我也在同时做其他的操作,比如大量的打印芯片状态等等,这个时候就很容易产生终端死机的现象,而这个时候是程序死机了,不是终端有问题。
我怀疑是不是信号有问题就把信号变成了子进程,让子进程while 1 ,然后sleep1秒,也可以完成轮训操作,但是主进程还是一样在大量printf的事情也会产生终端死机,这个时候是所有的程序全部都死机了,因为子进程控制的灯也挂了,就是不会发生变化了。
请教高手,最有可能是发生在哪里的错误呢,是驱动?上层应用?还是内存泄露?现在看起来只要不printf,它永远不会死机。。
代码如下:
main()
{
signal(SIGALRM,poll);//那个信号宏定义忘记怎么写了,是定时信号,错了大家见笑
alarm(1);
//后面就是其他的操作了
}
void poll(void)
{
int handle;
handle=open(driver_name,O_RDONLY);
ioctl(handle....);//这里做的事情很多,就是查看芯片的一些状态,大概耗时得半秒
alarm(1);
}
这个时候信号已经被激活了,而我也在同时做其他的操作,比如大量的打印芯片状态等等,这个时候就很容易产生终端死机的现象,而这个时候是程序死机了,不是终端有问题。
我怀疑是不是信号有问题就把信号变成了子进程,让子进程while 1 ,然后sleep1秒,也可以完成轮训操作,但是主进程还是一样在大量printf的事情也会产生终端死机,这个时候是所有的程序全部都死机了,因为子进程控制的灯也挂了,就是不会发生变化了。
请教高手,最有可能是发生在哪里的错误呢,是驱动?上层应用?还是内存泄露?现在看起来只要不printf,它永远不会死机。。
|
把printf换成write试试,printf是不可重入的~~