bash - kill命令脚本

时间:2015-09-24 17:49:43

标签: linux bash shell

我正在考虑编写shell脚本作为课程的先决条件,并希望得到一些帮助。我目前正在做一个热身练习,要求我编写一个shell脚本,在执行时会杀死我给出的任何当前正在运行的命令进程。在本练习中,我使用的是“少”。命令(所以要测试我会输入' man ps | less')。

然而,由于这是我写的第一个真实剧本(除了传统的" Hello World!"我已经完成了),我很少被困在怎么开始我搜索了很多内容并返回了一些令人困惑的结果。我知道我需要从一个shebang开始,但我不知道为什么。我正在考虑使用' if'声明;

的内容
if 'less' is running
kill 'less' process
fi

但我不确定如何去做。由于我对此非常陌生,我还想确保我正确地编写脚本。我使用记事本作为文本编辑器,一旦我在那里编写了我的脚本,我就将它保存到我在终端中访问的目录,然后从那里运行,对吗?

非常感谢你给我的任何建议或资源。我确信一旦掌握了编写脚本的基础知识,我就能找出更难的练习。

3 个答案:

答案 0 :(得分:1)

尝试:

pgrep less && killall less

pgrep less查看名为less的任何进程的进程ID。如果找到进程,则返回true,在这种情况下触发&&子句。 killall less会终止名为less的任何进程。

请参阅man pgrepman killall

简化

这可能会忽略您的练习,但是没有必要测试正在运行的less进程。跑吧:

killlall less

如果没有less进程正在运行,则killall不执行任何操作。

答案 1 :(得分:1)

试试这个简单的代码段:

#!/bin/bash

# if one or more processes matching "less" are running
# (ps will return 0 which corresponds to true in that case):
if ps -C less
then
    # send all processes matching "less" the TERM signal:
    killall -TERM less
fi

有关可用信号的更多信息,请参阅通过man 7 signal提供的手册页中的表格。

答案 2 :(得分:0)

您可以在bash中尝试以下代码:

#Tell which interpreter will process the code
#!/bin/bash

#Creating a variable to hold program name you want to serach and kill
#mind no-space between variable name value and equals sign
program='less'

#use ps to list all process and grep to search for the specific program name
# redirect the visible text output to /dev/null(linux black hole) since we don't want to see it on screen
ps aux | grep "$program" | grep -v grep > /dev/null

#If the given program is found $? will hold 0, since if successfull grep will return 0
if [ $? -eq 0 ]; then
    #program is running kill it with killall
    killall -9 "$program"
fi