Коли я запускаю команду ( 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запускається рекурсивно. Насправді, я думаю, це йде на кілька рівнів глибше.