В bash, как я могу запустить задание в остановленном состоянии, как будто я запустил его нормально, а затем сразу нажал Ctrl-Z?
Или как если бы я немедленно отправил SIGSTOP процессу, но не дал процессу возможности выполнить до того, как он получит SIGSTOP.
Дубликат http://serverfault.com/questions/293632/how-do-i-start-a-process-in-suspended-state-under-linux?
Foon 12 лет назад
0
Да, это точная копия. К сожалению, другой вопрос также не получил ответа к моему удовлетворению.
nibot 12 лет назад
0
2 ответа на вопрос
5
choroba
Вы можете запустить новый подоболочек, немедленно остановить его, а затем (т.е. после повторного запуска makint) запустить вашу команду. Я использовал переменную $ BASHPID, чтобы получить PID подоболочки, так как $$ по-прежнему возвращает PID родителя:
( kill -SIGSTOP $BASHPID; exec my_command )
Использование execздесь приведет к тому, что my_commandпроцесс будет использовать тот же PID, что и подоболочка.
Измените его на `(kill -SIGSTOP $ BASHPID; exec my_command)`, и я думаю, что у нас есть победитель!
nibot 12 лет назад
1
4
Zardus
I know this question is quite old, but just in case someone is looking for this functionality, like I was:
I recently added this to my LD_PRELOAD module collection (https://github.com/zardus/preeny). Using preeny, you can have a process suspend itself on startup:
# 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 suspends the process during library startup, before main() is called.
Привет, Zardus, и добро пожаловать в Super User. Не беспокойтесь об ответе на старый вопрос. Это интересный подход!
a CVn 9 лет назад
1
Этот подход хорош, потому что он на самом деле загружает двоичный файл. Тем не менее, я предполагаю, что другие функции конструктора могут быть запущены раньше.
user877329 7 лет назад
0
Да ... К сожалению, я не нашел способа контролировать порядок выполнения конструкторов.
Zardus 7 лет назад
0