BASH - operacje na procesach

0

Witam. Kompletnie nie mam pojęcia jak zatytułować mój problem. Mam skrypt a.sh który jest uruchamiany automatycznie podczas startu systemu i on cały czas pracuje w pętli. Na początku przed rozpoczęciem pętli uruchamia skrypt b.sh który też zaczyna pracować w pętli cały czas. Rozwiązanie to jest o tyle wygodne, że w przypadku zatrzymania skryptu a.sh skrypt b.sh zatrzymywany jest automatycznie. - to działa dobrze :)

Potrzebuje czasem zatrzymać skrypt b.sh i ręcznie znajduję go bez problemu ale chcę zrobić na to automat i tu jest problem. PID jest przypisywany zawsze inny a nazwa procesu nie nazywa się b.sh tylko sh. Wywołanie polecenia killall sh wywala mi nie tylko ten skrypt ale i całą powłokę :) Znacie jeszcze jakiś sposób na rozpoznanie procesu żeby go zatrzymać albo czy da się podczas uruchamiania b.sh nadać mu jakiś określony PID / nazwę czy cokolwiek?

0

Znalazłem rozwiązanie, może nie estetyczne ale działa. Uruchamian w terminalu ps aux i zapisuje do pliku tekstowego a.txt. ps aux daje mi nie tylko PID ale wyświetla adresy do plików w tym przypadku mój b.sh :) Więc w pliku a.txt za pomocą grep wyszukuje b.sh obrabiam za pomocą cut żeby otrzymać PID i nie pozostaje mi nic innego jak wykorzystać PID do zatrzymania procesu :) - może komuś się przyda.

Jeśli macie jakieś inne pomysły chętnie poznam :)

0

Skrypty startowe Slackware'u robią to jakoś tak:

#!/bin/bash
  
echo $$ > /tmp/test.pid # to jest kluczowe

while true
do
  echo " " > /dev/null # cośtam cośtam, dla prezentacji pętli nieskończonej
done

a ubijasz go przez

kill -9 `cat /tmp/test.pid`

Generalnie zmienna $$ przechowuje pid powłoki wykonującej skrypt. No i mój przykład nie jest odporny na wiele odpaleń tego samego skryptu, nie sprząta po sobie itd. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1