我正在尝试将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 #
答案 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
。在你的情况下,你完全没有必要(如果只是因为你将输出重定向到一个文件),所以你可以放弃它们。