0

スクリプトで 1 つの tcpdump を開始しようとしています。しかし、私はいつも複数を取得します。それは私のps出力です:

 1260 root     tcpdump -i br0 -C 1024 -w /media/usbhd-sdc2/pcaps/abfrage2.pcap
 1267 root     tcpdump -i br0 -C 1024 -w /media/usbhd-sdc2/pcaps/abfrage2.pcap

これは、稼働時間が開始時間と同じかどうかを確認するコードです。同じである場合は、tcpdump を開始し、PID も保存する必要があります。
しかし、関数 readPID が十分に高速ではないため、なぜ 2 番目のものを開始するのでしょうか?

 if [[ $timestart == $Zeit ]] || [[ "$pid1" != "" ]];then
                echo "First"
                if [[ $timeend != $Zeit ]];then
                        echo "second"
                        if [ "$pid1" == "" ];then
                                echo "third"
                                if [ "$port" != "" ];then
                                        echo "fourth"
                                        run_tcpdump port
                                        pid1=$(readPID1)
                                        echo $pid1
                                else

ReadPID 関数:

readPID1(){
ps -eo pid,args|awk '/abfrage2/ && ! /awk/{print $1}'
}

アップデート

Tcpdump 関数:

run_tcpdump(){
if [ "$1" == "port" ];then
  sudo tcpdump port $port -i br0 -C 1024 -w /media/usbhd-sd[b-c]2/pcaps/abfrage2.pcap &
else
  sudo tcpdump -i br0 -C 1024 -w /media/usbhd-sd[b-c]2/pcaps/abfrage2.pcap &
fi
}
4

1 に答える 1

1

tcpdumpシステム全体のパッケージではなく、関数を呼び出す可能性があると思います。run_tcpdumpたとえば、スクリプトで名前を変更します。ただし、それが根本的な原因であるかどうかはわかりません。

tcpdumpまた、スクリプトを開始する前に、プロセスがないことを確認してください。最初のプロセスが前回の実行からのものではなかったと確信していますか?

于 2015-12-21T12:30:09.450 に答える