无法通过$捕获和回显PID!

时间:2014-03-29 03:12:10

标签: bash unix tcpdump nohup

我正在尝试将tcpdump作为后台进程启动,并获取其PID。该脚本将监视系统的磁盘空间,CPU和内存,并在超过阈值时终止tcpdump进程。但我不能使用$!来获得PID。输出为空白。

#!/bin/bash
`nohup tcpdump port 389 -i bond0 -s 0 -w /tmp/capture.pcap  > nohup2.out 2>&1&`
my_pid=$!                                                                      
echo $my_pid                                                                   

flag=1                                                                         
exit 1                                                                         

,输出

bash # sh t.sh

bash #     

1 个答案:

答案 0 :(得分:3)

改变这个:

`nohup tcpdump port 389 -i bond0 -s 0 -w /tmp/capture.pcap  > nohup2.out 2>&1&`

到此:

nohup tcpdump port 389 -i bond0 -s 0 -w /tmp/capture.pcap  > nohup2.out 2>&1 &

反引号意味着该命令应该在子shell中运行,并且其输出被捕获并替换为新命令。例如,这个命令:

`echo foo bar`

等同于此命令:

foo bar

因为它运行echo foo bar,捕获输出foo bar,然后运行foo bar。在你的情况下,你完全没有必要(如果只是因为你将输出重定向到一个文件),所以你可以放弃它们。