Java信号链接

Java信号链接,第1张

概述Java信号链接

我有一个专门的Process type类的程序,它处理在linux上本地执行的进程。

它根本不使用Java的Process类,因为它需要对stream程进行一些特殊的处理。 因此,它还为SIGCHLD安装了自己的信号处理程序,以便知道进程何时退出。

不过,我只是在我的代码中添加了一个Runtime.exec()调用,显然它为SIGCHLD安装了自己的信号处理程序,这意味着我再也不会得到一个SIGCHLD ,这是不好的。 我遵循了oracle的信号链指令,但同样的问题发生,我从来没有得到一个SIGCHLD 。

所以,基本的问题是:在Java中链接SIGCHLD可能吗?

针对这种小型数据/命令广播应用的build议networking拓扑结构?

用于信号处理和用户pipe理的Python Unix / windows抽象层

使用Java将读取WAV文件时的采样率转换为采样数组

在windows上使用C将数据stream式传输到声卡

使用malloc / free on callstack从Signal Handler回溯linux 64位

点击ALSA音源

Cygwin中的信号处理行为

Sox(Swiss Army Knife)用于沉默和噪音去除的algorithm是什么

从任意audio文件中提取部分语音的好方法是什么?

在linux中使用signal.h编译错误

libJsig没有帮助,因为SIGCHLD处理程序是由libjava安装的,而不是由JVM本身安装的。

在java.lang.UNIXProcess的静态初始化程序中,使用sa_handler = SIG_DFL sigaction(SIGCHLD,...)仅由Java Class library调用一次。

现在您有以下选项可以解决这个问题。

最简单的一个。 只需在初始化java.lang.UNIXProcess 之后安装信号处理程序。

创建您自己的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? 我假设你自己创建子进程代码。

总结

以上是内存溢出为你收集整理的Java信号链接全部内容,希望文章能够帮你解决Java信号链接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1156826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存