我有一个简单的shell脚本,其中多个可执行文件将按顺序运行。每次新的可执行文件开始运行时,都会启动一个带有新pid的新进程。可以用相同的pid运行它们吗?我知道对于shell脚本,我们可以使用“source”。但我不知道如何处理可执行文件。

最佳答案

原则上,我认为这应该是可能的,但实际上,这将是非常复杂和脆弱的。
linux中的exec系列系统调用允许进程用一个完全新的进程替换自己,该进程保持相同的pid。棘手的部分是不知何故从第二个过程“返回”到第一个过程。当调用exec时,操作系统加载开始运行新进程所需的所有内容,并清除与当前进程(被替换的进程)相关的所有状态。当新进程终止时,操作系统将释放与该进程相关联的所有资源(包括pid)。
因此,如果你真的想这么做,你就必须劫持进程的终止方式,以便重新启动原来的进程,而不是让操作系统清理所有东西。你怎么能这么做?好吧,execleexecvpe函数允许程序在启动进程之前指定新进程的环境。由于每个进程都依赖于libc(或等效程序)来启动/删除进程,因此您应该能够提供一个自定义的libc,该自定义exec将重新启动脚本的执行,或libc另一个进程。最大的困难就是破解这样一个exec。此外,您必须找到一个好方法,让您的主程序保持状态,即使操作系统清除了它调用时可能使用的任何内存。你可以用临时文件来完成这项工作。
长话短说,别这么做。虽然坐在这里思考实现这一目标所需的大量黑客攻击对我来说有点有趣,但这将是一个巨大的痛苦,我相信无论你真正想要解决的问题有一个更优雅的解决方案。

关于linux - 是否可以在具有相同PID的Shell脚本中运行多个可执行文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17686256/

10-16 21:50