2

В bash , как я могу запустить задание в остановленном состоянии, как будто я запустил его нормально, а затем сразу же нажал Ctrl-Z?

Или как если бы я немедленно отправил SIGSTOP процессу, но не дал процессу возможности выполнить его до того, как он получит SIGSTOP.

2 ответа2

5

Вы можете запустить новый подоболочек, немедленно остановить его, а затем (т.е. после повторного запуска makint) запустить вашу команду. Я использовал переменную $ BASHPID, чтобы получить PID подоболочки, так как $$ по-прежнему возвращает PID родителя:

( kill -SIGSTOP $BASHPID; exec my_command )

Использование здесь exec заставит процесс my_command использовать тот же PID, что и подоболочка.

4

Я знаю, что этот вопрос довольно старый, но на всякий случай кто-то ищет эту функциональность, как я:

Я недавно добавил это в свою коллекцию модулей LD_PRELOAD (https://github.com/zardus/preeny). Используя preeny, вы можете приостановить процесс при запуске:

# https://github.com/zardus/preeny
# cd preeny
# make
# LD_PRELOAD=x86_64-linux-gnu/startstop.so /bin/echo TEST
[1]+  Stopped    LD_PRELOAD=x86_64-linux-gnu/startstop.so /bin/echo TEST
# fg
TEST

Preeny приостанавливает процесс во время запуска библиотеки перед вызовом main() .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .