我有一个简单的Shell脚本,其中多个可执行文件将按顺序运行。每次新的可执行文件开始运行时,都会启动带有新PID的新进程。是否可以使用相同的PID运行它们?我知道对于shell脚本,我们可以使用“source”。但我不知道如何处理可执行文件。
答案 0 :(得分:1)
当shell创建新进程时,由OS分配PID。没有办法告诉操作系统使用某些特定的PID。所以这是不可能的。
答案 1 :(得分:1)
原则上,我认为它应该是可能的,但在实践中它会非常复杂和脆弱。
Linux中的exec
系列调用允许进程用一个全新的进程替换自己,该进程保持相同的PID。棘手的部分是以某种方式从第二个过程“返回”回到第一个过程。当调用exec
时,操作系统会加载开始运行新进程所需的所有内容,并清除与当前进程(被替换的进程)相关的每个状态。当新进程终止时,操作系统会释放与该进程关联的所有资源(包括PID)。
因此,如果您真的想要这样做,您将不得不劫持进程如何终止以重新启动原始进程,而不是让操作系统清理所有内容。你怎么能这样做?好吧,execle
和execvpe
函数允许程序在开始进程之前指定新进程的 environment 。由于每个进程都依赖于libc
(或等效的)来启动/拆除进程,因此您应该能够提供自定义libc
,这将重新开始执行您的脚本,或{{1另一个过程。最大的困难是黑客攻击exec
。此外,即使操作系统在调用libc
时擦除了它可能使用的任何内存,您也必须找到一个让主程序保持状态的好方法。您可以使用临时文件来完成此操作。
故事很长,不要这样做。虽然我坐在这里思考需要大量的黑客攻击这对我来说很有趣,但这将是一个巨大的痛苦,我相信对于你正在尝试的任何问题,我们都会有更优雅的解决方案。解决。