如何从一个进程切换到另一个进程并杀死第一个进程

如何从一个进程切换到另一个进程并杀死第一个进程

我有以下场景,我有两个程序,一个在后台运行,一个在前面运行。后面的程序正在为前面的程序做一些事情。一旦后台程序完成了必要的配置,它就会发出信号,表明它已经完成了对第一个程序的备份支持,现在需要杀死前台程序,后台程序将控制第一个程序。

帮助非常重要,我将如何在 Linux 中完成这个场景。任何方向或提示都将受到高度赞赏。

答案1

理解所指定的要求是很困难的,所以首先我将尝试说明哪里可能需要额外的解释。

您已将这篇文章标记为“迁移”,因此我假设这些程序已经存在并且已知可以在某些非 Linux 架构上运行。进程间通信和信号发送的概念相当普遍,但说明当前运行的程序的体系结构和操作系统将非常有帮助。

我还看到了“多线程”标签,尽管文本只提到了两个不同的进程。这两个程序实际上都是多线程的吗?

我最初认为“前”和“后”与由外壳(也已标记)启动的前台和后台进程相关。但这并不是进程本身之间的真正关系,而是它们与其启动机制的关系。

我相信您指的是一个“前端”程序,它提供了一个用于输入参数的 GUI,一旦这些参数被传递到“后端”程序,它就会自动进行。前端也可能只需要暂停,直到可以再次使用 GUI 来提供反馈或结果。

一个关键问题是两个程序之间的参数通信。我所知道的方法有:共享内存;管道流(如无名管道、命名管道或套接字);和共享文件。信号仅适用于事件,不适用于数据流。必须了解现有机制,这样我们才能继续。

一个程序不可能“控制”另一个程序。可能存在父子关系(您的前端或后端都可以是父级),但这种关系无法颠倒。父进程的功能是预先安排父进程和子进程之间的通信:或者,父进程可以启动两个可以相互通信的子进程(兄弟姐妹)。

父进程或子进程都可以向对方发出信号,实际上每个信号都可以杀死另一个进程。更常见的方式是通过关闭他们之间的沟通渠道来结束关系,这使得结束程序具有彻底关闭的能力。

如果您已经拥有这些程序,那么准确了解它们目前​​如何交互将非常有帮助,以便可以推荐最接近的 Linux 功能匹配。当另一种方法可能更适合时,我建议一个需要对现有代码进行重大更改的模型是没有意义的。

几乎可以肯定的是,Linux能够为这些程序的协作提供必要的环境。问题是我们仍然对需要模拟的现有机制一无所知,或者实际上您是否有权访问程序的源代码以及它们是用什么语言编写的。

相关内容