Kiedy uruchamiam polecenie ( make
w dużym projekcie) z powłoki, mogę wpisać Ctrl-Z, aby zatrzymać proces i powrócić do powłoki. Następnie mogę uruchomić, fg
aby kontynuować proces.
Próbuję napisać skrypt powłoki, aby to zautomatyzować (w szczególności, aby sprawdzać temperaturę mojego procesora co kilka sekund i zatrzymać proces, jeśli robi się zbyt gorąco, ponieważ mój komputer jest podatny na przegrzanie). Moja pierwsza próba działała w ten sposób (uproszczona):
make &
subpid="$!"
sleep 2
# If the CPU temperature is too high...
kill -STOP "$subpid"
sleep 2
# If the CPU temperature has dropped to safe levels...
kill -CONT "$subpid"
wait "$subpid"
Niestety to nie zadziałało; wysłanie SIGSTOP do procesu nie wstrzymało go (co widać po dalszym wysyłaniu danych wyjściowych do terminala). Uruchomiłem make &
z linii poleceń, wysłałem SIGSTOP i sprawdziłem status procesu za pomocą ps
; został wymieniony jako zatrzymany (i zaczął się ponownie, gdy wysłałem SIGCONT), ale nadal wyrzucał moc wyjściową i zwiększał moją temperaturę rdzenia! Zatrzymanie go za pomocą Ctrl-Z nigdy nie miało tego problemu, ale nie wiem, jak to zrobić w skrypcie.
Czym różni się Ctrl-Z kill -STOP
i jak mogę uzyskać zachowanie tego pierwszego w skrypcie powłoki?
make
jest uruchamiany rekurencyjnie. W rzeczywistości myślę, że ma kilka poziomów głębokości.