Java 信号链
2022-09-02 10:59:23
libjsig
没有帮助,因为处理程序是由 安装的,而不是由 JVM 本身安装的。SIGCHLD
libjava
sigaction(SIGCHLD, ...)
with sa_handler = 仅由 java.lang.UNIXProcess 的静态初始值设定项中的 Java 类库调用一次。SIG_DFL
现在,您可以通过以下选项来解决此问题。
最简单的一个。只需在 初始化 后安装信号处理程序。java.lang.UNIXProcess
创建你自己的钩子,它将在调用 with 和 参数时拦截并忽略它:LD_PRELOAD
sigaction
SIGCHLD
SIG_DFL
例如:
#define _GNU_SOURCE
#include <signal.h>
#include <dlfcn.h>
#include <stddef.h>
int sigaction(int signum, const struct sigaction* act, struct sigaction* oldact) {
static int (*real_sa)(int, const struct sigaction*, struct sigaction*) = NULL;
if (signum == SIGCHLD && act->sa_handler == SIG_DFL) {
return 0;
}
if (real_sa == NULL) {
real_sa = dlsym(RTLD_NEXT, "sigaction");
}
return real_sa(signum, act, oldact);
}
使用套接字代替SIGCHLD与您的孩子进行通信怎么样?我假设您自己创建子流程代码。