如何杀死一个在centos目录下运行的进程?

o2gm4chl  于 2021-05-27  发布在  Spark
关注(0)|答案(3)|浏览(388)

我们有一个要求,即从不同的文件夹运行同一个spark应用程序(基本上是一个.jar文件)的副本。我正在寻找一个shell命令,使用它我可以杀死一个文件夹中运行的spark应用程序,而不杀死其他spark作业。
前任:

/home/user/Folder1 - CapStoneSpark.jar
/home/user/Folder2 - CapStoneSpark.jar
/home/user/Folder3 - CapStoneSpark.jar

jar文件中的主类是“capstonesparkmain”。假设,我只想杀死运行在folder2中的capstonespark.jar,而不去碰或杀死运行在folder1和folder3中的capstonespark.jar,那么我该怎么办呢?
我已经试过了:

kill $(ps aux | grep 'CapStoneSparkMain' | awk '{print $2}')

但是,它扼杀了所有具有“顶点Spark”类的过程。
我只想终止源于单个目录的进程,不想触及从其他目录运行的进程的副本。

gwo2fgha

gwo2fgha1#

不清楚这些作业是如何启动的,但是假设每个作业都是以不同的工作目录启动的,就有可能终止特定的作业。假设可以通过/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\u folder)匹配,并且只向该文件夹中的进程发出kill。

ki1q1bka

ki1q1bka2#

您可以找到使用这些文件夹的所有进程id:

lsof | grep /home/user/Folder | awk '{print "kill " $2}'

并执行:

lsof | grep /home/user/Folder | awk '{print "kill " $2}'|sh
ttisahbt

ttisahbt3#

你好

检查中用户的for循环。。。

for i in $(pidof application); do grep -o ${user} /proc/${i}/cmdline; done

以及 if 它符合你的愿望 thenkill 命令开启 ${i} 循环中。

相关问题