有没有办法通过单独知道名称来停止使用shell脚本运行的java程序。我正在使用ksh shell
答案 0 :(得分:20)
这应该做的工作
jps -l | grep org.example.MyMain | cut -d ' ' -f 1 | xargs -rn1 kill
jps -l
:列出java进程,其中包含“应用程序主类的完整包名或应用程序JAR文件的完整路径名。”
grep
:选择您喜欢的流程
cut -d -' ' -f 1
:使用分隔符“'拆分列中的输出,并仅打印第一个(pid)
xargs -rn1 kill
:对每个PID执行kill(如果有的话)
请注意,您必须在运行流程时使用相同的用户(或root)运行jps和xargs
答案 1 :(得分:6)
向JVM添加一个唯一属性以便轻松识别它,例如for test.class
java -Duniquename=1 test
杀死它:
ps ax | grep uniquename | grep -v grep | awk '{print $1}' | xargs kill
答案 2 :(得分:3)
您可以使用jps标识与已启动的java程序名称相关联的进程ID(jps是java程序的进程管理器)。使用此ID,您可以正常终止该过程。
答案 3 :(得分:1)
你可以使用pkill:
pkill your_java_program_name
如果只运行程序的一个实例,这将有效。
答案 4 :(得分:1)
你可以使用ps的-o选项来格式化你的输出,
ps -eo cmd,pid | awk '!/awk/&&/mycommand/{cmd="kill -9 "$2;system(cmd)}'