я хотел бы запустить 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 невозможно.
Я пытался сделать это с помощью 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