Linux系统下如何优雅地关闭Java进程?

新闻是有分量的

Linux系统下如何优雅地关闭Java进程?

2019-07-30 23:35栏目:创投界

  Linux体例下怎么kill掉一个后台Java过程,自信童鞋们都清楚怎么操作。最初利用ps下令查找该Java过程的过程ID,然后利用kill下令实行杀掉。下令如下:

  再利用ps下令查该过程,觉察过程Test.jar仍然被杀掉。利用“kill -9 $pid”杀Java过程,清洁爽利。但该手法是不是中断Java后台过程的较好手法呢?

  “开荒一个Java后台标准,其性能是无间地扫描Linux体例下的某个ftp目次。假设有文献,就进程数据转换写入到数据库中;假设没有文献,就sleep一秒钟。ftp目次下的文献一贯地上传,Java标准管束完一个文献,就将该文献移到备份目次下面。”

  该场景涉及Java标准实行文献掀开、文献读取、文献备份、数据库邻接、数据库写入等操作。由于文献句柄和数据库邻接正在Linux体例中是有限的资源,因此文献和数据库操作告竣,必要实行封闭。

  假设用户直接利用“kill -9”杀掉一个后台正正在读取文献并写入数据库的Java过程。那么有不妨文献和数据库邻接没有精确封闭,并且数据文献也没有标识是否管束告竣,或管束到哪个身分。

  不日正在管束分散式音问Kafka的音问读取的使命,同样面对着上述场景的题目。假设读取了一条音问,正在管束该音问之进步程被用户强行杀掉。www.2977.com那么该条音问就损失了,既不正在音问队伍,也不正在数据库或当地文献中。因此必要让后台Java过程正在被杀的时辰取得合照,如许就能安插好过程的“后事”。

  Java中要取得kill信号合照,必要接受自“SignalHandler”类。无缺实摩登码如下:

  (2)增加一个变量bKilling用于标识该过程是否正正在被杀,假设是,则跳出轮回不正在领受Kafka音问;

  正在eclipse开荒境况中,援用sun.misc会报找不到类题目,实在该包正在rt.jar包中。必要设备一下IDE,疏忽掉Signal联系的纰谬和警惕,如下图所示:

  由ITPUB社区主办的第11届中邦体例架构师大会(SACC2019)谨慎启动,本届大会不绝延用四大主线并行的演讲形式,设立交易体例架构打算、大数据平台架构打算、数字化转型实施三大主线和微办事、开源架构打算、云原生均分线+来自互联网、金融、创制业、电商等周围嘉宾。请点击【阅读原文】进入大会官网。