如何杀死进程而不显示信息

由于最近一直在弄嵌入式的脚本,经常会用到轮训调用程序的方法,如打流过程,我需要正向,反向轮训,不同的网口的轮训,这样就必须在脚本中杀死iperf3,然后在启动,在比如测试485通讯,我不但要测正向也要测试反向,这样我就必须经常性的终止程序,但是只要终止程序就会在终端显示信息.

root@fl-imx6ull:~/1# iperf3 -s &
[1] 752
root@fl-imx6ull:~/1# -----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
    
root@fl-imx6ull:~/1# killall iperf3
iperf3: interrupt - the server has terminated
[1]+  Done(1)                 iperf3 -s
root@fl-imx6ull:~/1# 

但是这些信息我都存在log里面,在log里面我又不想显示这些信息,那么如何做呢?
刚开始的我还想利用shell里面的异常信息输出到黑洞的方法,就是/dev/null

root@fl-imx6ull:~/1# iperf3 -s &
[1] 754
root@fl-imx6ull:~/1# -----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

root@fl-imx6ull:~/1# 
root@fl-imx6ull:~/1# 
root@fl-imx6ull:~/1# killall iperf3 >/dev/null
iperf3: interrupt - the server has terminated
[1]+  Done(1)                 iperf3 -s
root@fl-imx6ull:~/1# killall iperf3 >/dev/null 2>1&
[1] 756
root@fl-imx6ull:~/1# iperf3 -s &
[2] 757
[1]   Done(1)                 killall iperf3 > /dev/null 2> 1
root@fl-imx6ull:~/1# -----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

root@fl-imx6ull:~/1# killall iperf3 >/dev/null 2>1&
[3] 758
root@fl-imx6ull:~/1# iperf3: interrupt - the server has terminated

[2]-  Done(1)                 iperf3 -s
[3]+  Done                    killall iperf3 > /dev/null 2> 1
root@fl-imx6ull:~/1# 

发现这样还是不行.
经过实验,发现了
方法1: 使用set指令
我们知道set指令可根据不同的需求来设置当前所使用 shell 的执行方式,同时也可以用来设置或显示 shell 变量的值,在这里我看到了 set -m 是使用监视模式,当系统启动的时候,我们的默认是使用的监视模式,这样有利于我们快速的查看系统运行是的信息,那么我就可以利用这个功能来实现我的想法了.

root@fl-imx6ull:~/1# iperf3 -s &
[1] 765
root@fl-imx6ull:~/1# -----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

root@fl-imx6ull:~/1# 
root@fl-imx6ull:~/1# 
root@fl-imx6ull:~/1# set +m killall iperf3
root@fl-imx6ull:~/1# 

我们看到,在杀死iperf3的时候,终端没有任何的反应,大喜过往,但是后来发现,这个有个弱点.

root@fl-imx6ull:~/1# ps
  PID TTY          TIME CMD
  664 ttymxc0  00:00:00 sh
  765 ttymxc0  00:00:00 iperf3
  766 ttymxc0  00:00:00 ps
root@fl-imx6ull:~/1# 

就是没有实际上杀次进程,只是让iperf3不在监视了.
方法2 使用()
我们知道在shell中,使用()包含的语句实际上就是新开了一个shell,在里面运算完成后,在返回当前shell,相当于是嵌套的功能,比如我们经常使用expr 就经常加(),还有我们可以使用 value=((${value}+1)) 进行数字运算,都和这些有关系.那么我们就可以利用这一点,

(./485read -d /dev/ttySC2 -b 9600 &)
root@okg2l:~# ps | grep 485read
  472 root      1232 R    ./485read -d /dev/ttySC2 -b 9600
  475 root      3280 S    grep 485read
root@okg2l:~# killall 485read
root@okg2l:~# ps | grep 485read
  479 root      3280 S    grep 485read
root@okg2l:~# 

对比一下:

root@okg2l:~# ./485read -d /dev/ttySC2 -b 9600 &
[1] 481
root@okg2l:~# ps | grep 485read
  481 root      1232 R    ./485read -d /dev/ttySC2 -b 9600
  483 root      3280 S    grep 485read
root@okg2l:~# killall 485read
[1]+  Terminated              ./485read -d /dev/ttySC2 -b 9600

怎么样,看到区别了吧
编写不易,点个赞再走!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

six2me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值