【发布时间】:2011-08-23 14:57:39
【问题描述】:
我们有一个 Linux 服务进程,它使用 fork 生成一个子进程,然后运行 execelp 来执行另一个程序。当我们运行命令“kill -6 [child_pid]”时,它没有任何效果。如果子程序自己运行,相同的命令将杀死子程序,所以我们很确定在这种情况下系统正在处理信号。那么为什么它在服务进程的控制下没有被子进程接收呢?任何帮助将不胜感激。
这正在 RedHat Linux 和 CentOS 中发生。
并且核心文件大小设置为无限制。
另外我想提一下,同样的命令也适用于父进程,所以我们知道父进程不处理(忽略)SIGABRT。父进程由 shell 脚本 (bash) 运行。因此,在运行命令“ps”时,我看到了 shell 脚本 pid、父 pid 和子 pid。该命令适用于父 pid 和 shell 脚本 pid。
我的理解是即使子进程继承信号处理程序,在 execlp 之后子程序不会。
【问题讨论】:
-
你的理解不正确...函数的exec family会导致child继承被忽略和阻塞的信号。这里没有魔法;要么内核有问题(不太可能),要么孩子阻塞或忽略
SIGABRT。没有其他可能。