- 论坛徽章:
- 0
|
背景描述:
其实是花了一段时间写了几个java的应用程序,打成了几个jar的包:app1.jar ,app2.jar ,app3.jar。 我这样启动这些java应用程序。
java -jar app1.jar
java -jar app2.jar
java -jar app3.jar
ps afx一下,就出现了
27879 pts/0 S 0:02 java -jar /root/pubs/app1.jar
27880 pts/0 S 0:03 java -jar /root/pubs/app2.jar
27881 pts/0 S 0:02 java -jar /root/pubs/app3.jar
另外呢,这台机器上还运行了一个容器glassfish
1612 ? S 0:00 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1615 ? S 0:04 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1616 ? S 0:21 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1617 ? S 0:00 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1618 ? S 0:00 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1619 ? S 0:00 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1620 ? S 0:01 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1621 ? S 0:00 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1622 ? S 0:23 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1626 ? S 0:00 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1627 ? S 0:00 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1628 ? S 0:00 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1632 ? S 0:00 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
1636 ? S 0:00 /usr/java/latest/bin/java -Dcom.sun.aas.instanceRoot=/usr/local/glassfish
....
问题如下:
为了方便,我写了一个脚本启动我写的应用。
#startapp.sh
#!/bin/bash
java -jar app1.jar
java -jar app2.jar
java -jar app3.jar
我还打算写一个脚本来关闭我写的应用。但是不知道该怎么写。如果写killall java那么会把容器glassfish也kill掉。
但是用kill,每次应用的pid都是变化的。
我有2种思路,但是都遇到了问题。
思路1:启动的时候把pid保存在一个文件里面,关闭脚本就去读文件里面的pid。但是问题是如何在启动一个程序的时候顺便得到它的pid?
思路2:由于ps信息中的进程参数里面包含了应用的名字。killall能否有某种隐藏用法能实现按参数来kill而不是按应用程序名kill?
潜水多年,特发此贴。
在线等待,多谢高手。 |
|