Linux系统中shell脚本相关操作

Linux系统执行了一个shell脚本,但是需要停止这个脚本,如何处理?

方案一

	killall fileName

说明:killall是一个命令,不是kill all,其中fileName是脚本名称,此方式简单粗暴。

方案二

	ps -ef | grep XXXX(shell脚本名).sh

说明:ps参数: -e:显示所有进程;-f:全格式显示;ps -ef第二个参数就是进程ID

输出结果:

root@gzk8s-master1:/home/cyye# ps -ef | grep test.sh
root     3317569 3192980  0 13:08 pts/1    00:00:00 /bin/bash ./test.sh
root     3325228 2935524  0 13:11 pts/2    00:00:00 grep --color=auto test.sh

上述指令执行后输出结果有两个进程号,为什么会这样?
因为查找进程使用了grep命令,而这个命令执行的时候带有要查找的进程参数,同时这也是一个进程。
例如,这条命令 ps -ef | grep test.sh 其实是分两步骤执行的,先执行 ps -ef 再执行 grep test.sh。这个命令本身执行的时候也是一个进程,并且也带有test.sh。
所以要查找 test.sh 进程,需要把 grep test.sh 这个进程过滤掉,才是最后的结果。

补充:grep是查询命令,比如 grep aaa | grep -v bbb 在查询aaa结果中,过滤掉包含了bbb的行。
grep -v 可以理解成 grep not
举例:cat test.log | grep "login" | grep -v "deviceType" 表示找出 test.log中包含login关键字,且没有deviceType这个字段的行。

过滤查询结果

	grep file-flume-kafka | grep -v grep  
    # file-flume-kafka为脚本名,并去除包含grep的行,避免影响最终结果正确性

终止进程
上述输出结果中的 grep --color=auto 是指进程grep进程本身,进程3317569才是正在执行的shell脚本。

	kill 3317569

一步到位的命令

	ps -ef | grep XXX.sh | grep -v grep | awk '{print $2}' | xargs kill

其中:
awk ‘{print $2}’ :逐行的读入,以空格为默认分隔符将每行切片,取第二行。
awk 参数 -F : 指定输入文件折分隔符。
比如 awk -F : ‘/^root/{print $7}’ passwd 表示搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
xargs kill:将前面的运行结果作为kill命令的参数运行。
xargs表示取出前面命令运行的结果,作为后面命令的输入参数。
xargs可选项:-n1,将每一个参数传给后面命令依次执行。

在实践过程中,使用ctrl+z停止任务后如何恢复任务?

ctrl+z的作用是停止任务,要恢复停止的任务要使用fg命令。

[root@localhost ~]# jobs
[1]+  已停止               top
[root@localhost ~]# fg 1

fg [任务序号],直接用fg命令,恢复的是最新停止的一条任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值