超过1小时的用户的BASH Kill进程

超过1小时的用户的BASH Kill进程,bash,process,kill,Bash,Process,Kill,我正在尝试编写一个一行程序,可以找到一个超过1小时的用户名的所有进程,并杀死它们。我有以下资料: for each in $(find /proc -maxdepth 1 -user hobbyisl -type d -mmin +60 -exec basename {} \;); do kill -9 $file; done 以下部分是正确识别流程: find /proc -maxdepth 1 -user hobbyisl -type d -mmin +60 -exec basename

我正在尝试编写一个一行程序,可以找到一个超过1小时的用户名的所有进程,并杀死它们。我有以下资料:

for each in $(find /proc -maxdepth 1 -user hobbyisl -type d -mmin +60 -exec basename {} \;); do kill -9 $file; done
以下部分是正确识别流程:

find /proc -maxdepth 1 -user hobbyisl -type d -mmin +60 -exec basename {} \;
运行整个程序时,我会出现以下错误:

kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

有人能帮忙吗?

在循环中,
$each
each
不是语法的一部分-它是一个变量名)变量保存进程id,而不是
$file

试试看:

for each in $(find /proc -maxdepth 1 -user hobbyisl -type d -mmin +60 -exec basename {} \;); do kill -9 $each; done

但是,我建议使用
process\u id
等变量,而不要使用
each
,因为这可能会导致这样的错误:)

在循环中
$each
each
不是语法的一部分-它是一个变量名)变量保存进程id,而不是
$file

试试看:

for each in $(find /proc -maxdepth 1 -user hobbyisl -type d -mmin +60 -exec basename {} \;); do kill -9 $each; done

但是,我建议使用
process\u id
等变量,而不要使用
each
,因为这可能会导致这样的错误:)

您的
for
语句使用变量
each
。您的
kill
语句使用变量
file
。因此,错误。

您的
for
语句使用变量
each
。您的
kill
语句使用变量
file
。因此,错误。

这里是一个使用ps、awk、xargs的单行程序。将用户
root
替换为正确的用户,并从xargs中删除
echo
,以便实际终止进程

ps -u root -o pid,etime | awk '{split($2,t,":"); split(t[1],t,"-"); if (int(t[2])>1) print $1;}' | xargs -I _ echo kill _
解释一下:

  • pid是进程id
  • etime是自进程启动以来经过的时间
注意:这将在一天以前的进程中工作(因为awk中存在拆分)

更新:有点长,但是:

ps -u root -o pid,etime | awk '{split($2,t,":"); n=0; for(i in t) n++; if(n > 2) { split(t[1],a,"-"); j=0; for(i in a) j++; x=a[1]; if(j>1) {x=a[2]} if(int(x)>0) print $1 }}' | xargs -I _ echo kill _

这是一个使用ps、awk、xargs的单行程序。将用户
root
替换为正确的用户,并从xargs中删除
echo
,以便实际终止进程

ps -u root -o pid,etime | awk '{split($2,t,":"); split(t[1],t,"-"); if (int(t[2])>1) print $1;}' | xargs -I _ echo kill _
解释一下:

  • pid是进程id
  • etime是自进程启动以来经过的时间
注意:这将在一天以前的进程中工作(因为awk中存在拆分)

更新:有点长,但是:

ps -u root -o pid,etime | awk '{split($2,t,":"); n=0; for(i in t) n++; if(n > 2) { split(t[1],a,"-"); j=0; for(i in a) j++; x=a[1]; if(j>1) {x=a[2]} if(int(x)>0) print $1 }}' | xargs -I _ echo kill _

如果您在运行的任何发行版中都有该命令,则
killall
命令本机支持此操作:

killall-u foo-o 2m巴

  • -u foo
    -为用户指定一个
  • -o 2m
    -按超过2分钟的进程进行筛选
  • bar
    附加筛选器(仅在命令中包含“foo”的进程)

如果您在运行的任何发行版中都有此命令,则
killall
命令本机支持此操作:

killall-u foo-o 2m巴

  • -u foo
    -为用户指定一个
  • -o 2m
    -按超过2分钟的进程进行筛选
  • bar
    附加筛选器(仅在命令中包含“foo”的进程)

所有的\u CAPS
变量都是“保留”供shell使用的,应该在脚本代码中避免使用。
所有的\u CAPS
变量都是“保留”供shell使用的,应该在脚本代码中避免使用。有关如何更正确地逐行读取数据的信息,请参阅。查看如何更正确地按行读取数据。噢,我的印象是“each”是一个函数参数,而不是我的变量。经验教训-非常感谢:)哦,我的印象是“每个”都是一个函数参数,而不是我的变量。经验教训-非常感谢:)