是否可以在具有相同PID的shell脚本中运行多个可执行文件?

时间:2013-07-16 20:22:35

标签: linux process executable

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

2 个答案:

答案 0 :(得分:1)

当shell创建新进程时,由OS分配PID。没有办法告诉操作系统使用某些特定的PID。所以这是不可能的。

答案 1 :(得分:1)

原则上,我认为它应该是可能的,但在实践中它会非常复杂和脆弱。

Linux中的exec系列调用允许进程用一个全新的进程替换自己,该进程保持相同的PID。棘手的部分是以某种方式从第二个过程“返回”回到第一个过程。当调用exec时,操作系统会加载开始运行新进程所需的所有内容,并清除与当前进程(被替换的进程)相关的每个状态。当新进程终止时,操作系统会释放与该进程关联的所有资源(包括PID)。

因此,如果您真的想要这样做,您将不得不劫持进程如何终止以重新启动原始进程,而不是让操作系统清理所有内容。你怎么能这样做?好吧,execleexecvpe函数允许程序在开始进程之前指定新进程的 environment 。由于每个进程都依赖于libc(或等效的)来启动/拆除进程,因此您应该能够提供自定义libc,这将重新开始执行您的脚本,或{{1另一个过程。最大的困难是黑客攻击exec。此外,即使操作系统在调用libc时擦除了它可能使用的任何内存,您也必须找到一个让主程序保持状态的好方法。您可以使用临时文件来完成此操作。

故事很长,不要这样做。虽然我坐在这里思考需要大量的黑客攻击这对我来说很有趣,但这将是一个巨大的痛苦,我相信对于你正在尝试的任何问题,我们都会有更优雅的解决方案。解决。