Java 如何在CentOS中终止从目录运行的进程?
我们需要从不同的文件夹中运行相同Spark应用程序(基本上是一个.jar文件)的副本。我正在寻找一个shell命令,使用它我可以杀死运行在一个文件夹中的Spark应用程序,而不杀死其他Spark作业 例: jar文件中的主要类是“CapStoneSparkMain”。假设,我只想杀死Folder2中运行的CapStoneSpark.jar,而不接触或杀死Folder1和Folder3中运行的CapStoneSpark.jar,那么我该怎么办 我已经试过:Java 如何在CentOS中终止从目录运行的进程?,java,linux,shell,apache-spark,centos,Java,Linux,Shell,Apache Spark,Centos,我们需要从不同的文件夹中运行相同Spark应用程序(基本上是一个.jar文件)的副本。我正在寻找一个shell命令,使用它我可以杀死运行在一个文件夹中的Spark应用程序,而不杀死其他Spark作业 例: jar文件中的主要类是“CapStoneSparkMain”。假设,我只想杀死Folder2中运行的CapStoneSpark.jar,而不接触或杀死Folder1和Folder3中运行的CapStoneSpark.jar,那么我该怎么办 我已经试过: kill $(ps aux | grep
kill $(ps aux | grep 'CapStoneSparkMain' | awk '{print $2}')
但是,它扼杀了所有具有“CapStoneSparkMain”类的过程
我只想终止来自单个目录的进程,不想接触从其他目录运行的进程的副本。Hello
用于检查中的用户的for循环
for i in $(pidof application); do grep -o ${user} /proc/${i}/cmdline; done
如果
符合您的要求则将kill
命令放在${i}
循环中。您可以找到使用这些文件夹的所有进程ID:
lsof | grep /home/user/Folder | awk '{print "kill " $2}'
并执行它:
lsof | grep /home/user/Folder | awk '{print "kill " $2}'|sh
目前尚不清楚作业是如何开始的,但假设每个作业都是以不同的工作目录开始的,则可能会终止特定的作业。假设可以通过/proc/$$/cwd(指向作业文件夹的符号链接)找到每个进程的工作目录。基于上述建议的命令/循环:
kill_folder=/home/user/Folder2
for pp in $(ps aux | grep 'CapStoneSparkMain' | awk '{print $2}') ; do
if [[ /proc/$$/cwd -ef "$kill_folder" ]] && kill $$
done
代码将检查symlink/proc/$$/cwd是否与命名文件夹(kill_文件夹)匹配,并且只向该文件夹中的进程发出kill命令。lsof命令可能会帮助您识别kill的正确pid。我是shell脚本编写新手。你能告诉我怎么做吗?我想OP只是想杀死顶点进程。
kill_folder=/home/user/Folder2
for pp in $(ps aux | grep 'CapStoneSparkMain' | awk '{print $2}') ; do
if [[ /proc/$$/cwd -ef "$kill_folder" ]] && kill $$
done