首先,我知道过去有类似的问题.
但这个问题没有得到妥善回答.相反,它转而建议如何捕捉信号.
所以只是为了澄清:我已经完成了处理信号所需要做的一切.我有一个应用程序,它通过管道分配监视主进程的守护进程.如果主进程崩溃(例如分段错误),它有一个信号处理程序,它将所有必需的信息写入管道并中止.
目标是在应用程序发生不良事件时尽可能多地获取信息,而不用处理"正常"操作,例如SIGHUP,SIGUSR1等.
所以我的问题是:我应该抓住哪些信号? 我的意思是说,如果没有我捕获它们的信号会导致应用程序中止.
到目前为止,我已经提出以下列表:
kill <pid>来自shell或AFAIK,可以是OutOfMemory的结果)有人知道我是否错过了什么?kill -l有很多...... :)
我正在使用git pre-commit钩子来检查提交.预提交脚本基本上做了一件事:
exec git diff-index --check --cached HEAD --
Run Code Online (Sandbox Code Playgroud)
它也做了一些其他的事情,但它们与这个讨论无关.
问题是,我在存储库中有各种各样的文件,并不是所有文件都必须遵守" git diff-index --check" 强制执行的检查.
所以我的问题是:如何排除/忽略这些文件?也就是说,我确实在git中跟踪它们,但我想在预提交检查中忽略它们.
例如,某个补丁包含*.c,*.h,*ini和*.xyz文件.我希望" git diff-index --check"仅适用于.c和.h文件.
我试图理解C/C++编译器如何处理按位操作.具体来说,我说的是用gcc编译的C语言,但我相信这个问题比这更为笼统.
无论如何,假设我有一个定义如下的宏:
#define SOME_CONSTANT 0x111UL
#define SOME_OFFSET 2
#define SOME_MASK 7
#define SOME_VALUE ((SOME_CONSTANT) << (SOME_OFFSET)) & (SOME_MASK)
static inline void foo() { printf("Value: %lu#n", SOME_VALUE); }
Run Code Online (Sandbox Code Playgroud)
SOME_VALUE的所有成分都是常量,它们在编译时都是已知的.
所以我的问题是:gcc会在编译时评估SOME_VALUE,还是仅在运行时完成? 如何检查gcc是否支持此类优化?
我正在尝试在发送的 skb 上计算 TCP/UDP 标头校验和。
基本上,有两个函数可以完成所有工作(在这个 stackoverflow 问题中也提到过,这个也是):
csum_tcpudp_magiccsum_partial例如,对于 TCP:
tcph->check = 0;
tcph->check = csum_tcpudp_magic(iph->saddr,
iph->daddr,
tcp_packet_len,
IPPROTO_TCP,
csum_partial((unsigned char *)tcph,
tcp_packet_len,
0));
Run Code Online (Sandbox Code Playgroud)
这工作正常 - 我能够传输 TCP/UDP 数据包并在接收端使用 wireshark 验证校验和。但是,我找不到有关碎片化 SKB 的任何信息。
当 TCP/UDP 负载碎片化时,这两个“魔法”函数会处理这种情况吗?
此外,TCP/UDP 标头可能位于 SKB 的非线性部分(也可能是分段的)。
这些功能也会处理这种情况吗?
我确实明白我可以尝试使用更大的数据包,这会导致它们碎片化,但是现在错误处理的代价将是内核 oops,而且我无法关闭系统。