Как убить команду, выполняемую из скрипта?

я хотел бы запустить tcpdump в моем собственном скрипте, а через некоторое время я хотел бы убить его снова. Как мне получить доступ к PID из tcpdump. Я пробовал с $$, но это только убивает сценарий.

if [[ $TIMEEND != $Zeit ]];then
                        echo "tcpdump started"
                        sudo tcpdump -i eth0 -w /media/usbhd-sd[b-c]1/abfrage2.pcap &
                        pid1=$!
                        break
                        #sudo umount /dev/sdb1
                else
                        sudo kill $pid1
                        echo "autodump stopped"
                fi

Это результат выполнения команды grep tcpdump, поэтому я думаю, что использовать pidof и pkill невозможно.

enter image description here

Я пытался сделать это с помощью awk

  pid1=$(ps -eo pid,args|awk '/abfrage2/ && ! /awk/{print $1}')
                            echo $pid1 >> /tmp/test.txt
                            sudo kill $pid1

Когда я напрямую использую команду для pid, он находит pid, но не выполняет kill.

Думаю, мне нужно немного переосмыслить свой код. Я импортирую время из файла конфигурации, затем проверяю, совпадает ли время начала, и, если оно есть, также следует проверить, не является ли оно временем окончания. Затем он должен выполнить tcpdump, если это еще не время окончания. Когда наступит время окончания, он должен убить файл tcpdump. Я знаю, что это не лучшее решение, но было бы неплохо заставить его работать с чем-то вроде этого.

   #!/bin/sh
source /media/usbhd-sdb1/config.conf
pluggedin=true
echo $TIMESTART
echo $TIMEEND
echo $$
echo $Zeit
echo $$ >> /tmp/test.txt
while [ $pluggedin ];do
        Zeit=$(date +"%T")
        if [[ $TIMESTART == $Zeit ]];then
                if [[ $TIMEEND != $Zeit ]];then
                        echo "tcpdump started"
                        sudo tcpdump -i eth0 -w /media/usbhd-sd[b-c]1/abfrage2.pcap &
                        #sudo umount /dev/sdb1
                else
                        pid1=$(ps -eo pid,args|awk '/abfrage2/ && ! /awk/{print $1}')
                        echo $pid1 >> /tmp/test.txt
                        sudo kill -9 $pid1
                        echo "autodump stopped"
                fi

        else
        echo "tcpdump not yet started"
        fi
done

0
30.11.2015, 16:51
0 ответов

Теги

Похожие вопросы