Коли я запускаю команду ( make
на великому проекті) з оболонки, я можу набрати Ctrl-Z, щоб зупинити процес і повернутися до оболонки. Згодом я можу побігти fg
продовжувати процес.
Я намагаюся написати скрипт оболонки, щоб автоматизувати це (зокрема, перевіряти температуру ЦП кожні кілька секунд і зупиняти процес, якщо він стає занадто гарячим, оскільки мій комп'ютер схильний до перегріву). Моя перша спроба спрацювала так (спрощено):
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"
На жаль, це не спрацювало; відправлення SIGSTOP в процес не призупинило його (як це стало очевидним продовженням надсилання виводу в термінал). Я забіг make &
у командному рядку, надіслав SIGSTOP і перевірив стан процесу ps
; він був вказаний як зупинений (і запускався знову, коли я надсилав SIGCONT), але він все ще виводив вихід і підвищує мою основну температуру! Припинення його Ctrl-Z ніколи не мало цієї проблеми, але я не знаю, як це зробити у сценарії.
Чим Ctrl-Z відрізняється від того kill -STOP
, і як я можу отримати поведінку колишнього в сценарії оболонки?
make
запускається рекурсивно. Насправді, я думаю, це йде на кілька рівнів глибше.