如何在停止状态下启动作业?

如何在停止状态下启动作业?

在 中bash,如何启动处于停止状态的作业,就像我正常启动它然后立即按下 Ctrl-Z 一样?

或者好像我立即向进程发送了 SIGSTOP,但没有给进程在收到 SIGSTOP 之前执行的机会。

答案1

您可以启动一个新的子 shell,立即停止它,然后(即再次运行它之后)运行您的命令。我使用 $BASHPID 变量来获取子 shell 的 PID,因为 $$ 仍然返回父级的 PID:

( kill -SIGSTOP $BASHPID; exec my_command )

在这里使用exec将导致my_command进程使用与子shell相同的PID。

答案2

我知道这个问题已经很老了,但万一有人正在寻找这个功能,就像我一样:

我最近将它添加到我的 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()

相关内容