有没有办法将进程加载到 RAM 中,但以某种方式告诉调度程序不要执行它?目的是让系统从磁盘读取二进制文件,在 RAM 中为代码分配页面,而不是立即跳转到代码中开始执行它。打算稍后再启动它。
以下近似于此,但允许在传递信号之前执行一些量以暂停进程:
$ /path/to/program &; kill -STOP $!
我假设代码执行的某些部分涉及在执行我的实际程序的第一行之前引入库和其他“设置”。我不介意这些步骤是否运行。我们可以假设我有 root 并且可以对系统进行任何更改以支持此任务。
玩过gdb
,我认为这可以以某种方式完成我的要求。这就足够了,但理想情况下,我有办法做到这一点,而不需要在我的进程旁边运行任何东西。
作为对评论的回应,我怀疑按需加载问题确实会挫败这个计划。我希望将代码加载到 RAM 中,修改文件,然后让进程执行。RAM 中的代码现在与磁盘上的代码不同。如果进程的第一项工作是对文件进行哈希处理,那么它现在会得到“错误”的哈希值,即使它正在运行“正确”的代码。
这可能无法实现您真正想要的(如评论中所述,二进制文件根据需要加载),但它会在进程启动后立即停止,并让它等待
SIGCONT
.将以下内容放入文件中,例如
stop.c
:将其构建为共享库:
然后在您想要“启动和暂停”程序时预加载它:
当从 shell 运行时,这实际上会将进程置于后台,然后您就可以使用
fg
.