如何让linux网卡假死,linux下程序假死

linux下程序假死

发布时间:2006-09-10 00:51:19来源:红联作者:coolentboy

前一段时间新开发的一个程序,总是会出现一些奇怪的停滞,也就是说程序长期运行就不再输出信息了。

因为是在调试阶段所以程序在很多地方都有用printf()输出的消息,以判断程序出现错误的位置,然后有诊断性的解决问题。

程序大致结构如下:信号处理函数a(),对信号处理函数得到的数据进行处理b().捕捉到的消息全部是在数据处理函数b()内的,因为程序是在rh9.0上开发,然后在裁减系统上跑而且目前程序都是在小系统内实测的,不然得不出实际效果;而且程序是处于长期运行,所以用gdb不太好不过该错误(刚开始这么认为得),所以就一直用printf()函数来得到一些错误。

[code] void a(...){

...

printf("signal catched\n");

...

}

void b(...){

...

printf("enter b()\n");

...

while(1){

...

printf("...");

c();

printf("data have received\n");

..

}

}[/code]

void b()函数内printf()很多就对了,每次程序都是在b()内某个printf()消息输出后,就停滞不动了。

刚开始认为是使用锁出现了问题,但是后来改过后改问题仍然出现。

最后将小系统使用得库文件等都使用rh9.0下得程序来跑,通过配置环境变量来做的,在程序停滞的时候进入gdb环境。

[code]gdb

>attach (no)

>thread apply no backtrace full

>bt(显示不出来需要的信息)[/code]

注:b() 采用线程来实现,当然了还有其它的很多不同模块的线程也在运行。

从线程栈可以看到:

当b()线程运行到printf()->vfprintf()时信号到达;进入信号处理函数a()->printf()->vfprintf()停滞。

从栈可以看出程序是因为printf()函数导致停滞的,查阅资料有说是和流控制有关,我想最大的可能就是和printf()的实现机制有关系。

不过最让我想不通的还是b()还有一次是死在malloc()内,但是我的a()处理函数根本没有使用malloc()函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux下,通常可以使用驱动程序包(如Intel的iwlwifi-firmware和Broadcom的wl)来安装网卡设备的驱动程序。另外,也可以使用发行版提供的更新机制(如Ubuntu的apt-get)来自动安装驱动程序。 ### 回答2: 在Linux操作系统下,网卡设备驱动程序是连接计算机和网络之间的关键组件,它负责控制和管理网卡设备的各种功能和操作。 在Linux中,网卡设备驱动程序是作为内核模块加载的。当系统启动时,内核会根据硬件检测到的网卡设备信息加载相应的驱动程序。这些驱动程序将与内核进行交互,以提供网络通信能力。 网卡设备驱动程序包含了相应网卡设备的底层控制逻辑和操作指令。它通过与内核交互,将上层网络协议栈的请求转换为底层网卡设备可以理解和处理的操作。这意味着网卡设备驱动程序负责处理包括数据发送、接收、处理和中断等操作,使得网络通信能够在硬件层面得以实现。 在Linux系统中,网卡设备驱动程序负责管理和配置网卡设备的属性和参数。用户可以通过不同的工具和命令来进行网卡设备的管理,如ifconfig、ethtool等。这些工具可以帮助用户查看和设置网卡设备的IP地址、子网掩码、数据帧大小等属性,以满足用户的网络需求。 此外,通过更新和升级网卡设备驱动程序,用户可以得到更好的性能和更好的兼容性。开源的Linux系统为用户提供了众多网卡设备驱动程序的选择,以满足不同硬件设备的需求。 综上所述,Linux下的网卡设备驱动程序承担着控制和管理网卡设备的重要角色,是实现网络通信的关键组件。通过加载适当的驱动程序,用户可以使用各种网卡设备并享受网络通信带来的便利。 ### 回答3: 在Linux系统中,网卡设备驱动程序负责管理和控制计算机上的网络接口卡。它们允许操作系统与网络硬件进行通信,并实现网络数据的传输。 网卡设备驱动程序通常由硬件制造商开发,以确保其与特定的网卡设备兼容。这些驱动程序编写成模块形式,可以动态地加载到内核中,或者作为静态链接编译到内核中。 在加载驱动程序时,操作系统通过设备树(如果使用的是现代的设备模型)或基于PCI系统的ioctl调用与网卡设备进行通信。驱动程序初始化网卡设备,设置接口参数,例如MAC地址,MTU等。此外,驱动程序还为设备提供一组网络协议参数,如IP地址、子网掩码和默认网关等。 一旦网卡设备驱动程序加载成功,操作系统便可以通过网络协议栈来发送和接收数据包。驱动程序负责处理硬件中断,收集和发送数据以及管理网络设备的状态。 在Linux中,常见的网卡设备驱动程序是以太网驱动程序。这些驱动程序包括广泛的硬件支持,从常见的千兆以太网控制器到无线网卡设备。 总之,Linux下的网卡设备驱动程序是允许操作系统与网络硬件进行通信,并实现网络数据传输的关键组件。它们负责初始化和管理网卡设备,处理硬件中断以及提供网络协议参数。这些驱动程序在操作系统启动时加载,以确保计算机可以连接到网络并进行通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值