如何在另一个进程中调用函数

How can I call a function in another process

提问人:sorosh_sabz 提问时间:2/19/2015 最后编辑:sorosh_sabz 更新时间:5/26/2023 访问量:3516

问:

如何在另一个进程中调用“进程函数”? 我想通过这种方法在 Linux 中使用 C 或 C++ 语言的多个进程之间实现发布/订阅模式。

Linux 事件处理 IPC RPC 发布-订阅

评论

2赞 Barmar 2/19/2015
不能直接调用其他进程中的函数。您需要设计一个进程间通信协议,并在两个进程中实现它。您可以使用消息队列或套接字来发送数据。
0赞 sorosh_sabz 2/19/2015
@Barmar:感谢您的回复,如果我不能直接在另一个进程中调用函数并不重要,我想以任何方式(例如RPC或一种带有IPC的技术)调用另一个进程中的函数来实现发布/订阅模式。我想知道这种方式。
0赞 Barmar 2/20/2015
使用消息队列或 Unix 域套接字在进程之间进行通信。你的问题太笼统了,很难提供一个像样的答案。你真的不敢相信这个广泛的话题可以用几段话来解释,对吗?
0赞 sorosh_sabz 2/20/2015
@Barmar:好的,我可以假设我有一种IPC的方法,但主要问题仍然存在。如何使用 IPC 在另一个进程中调用函数?或者换句话说,如何在另一个进程中触发事件?
0赞 Barmar 2/20/2015
你没有。另一个过程必须等待某些东西通过IPC到达。当它读取该数据时,它会执行一些操作作为响应。

答:

1赞 gbajson 5/30/2018 #1

您可以使用 gdb 附加到进程并执行一些函数,例如:

$ gdb -p 17304
Attaching to process 17304
[...]
(gdb) call getppid()
$1 = 29136

在 gdb 中,运行以查看它们。(gdb) info functions

评论

0赞 sorosh_sabz 7/17/2018
我需要一个编程模型来使用这种用法。
0赞 Abdull 8/8/2023
call getppid()可能会失败,并显示“'getppid' 具有未知的返回类型;将调用强制转换为其声明的返回类型”。在这种情况下,请添加 called-function-appropriate 返回类型 cast: 。call (pid_t) getppid()
0赞 wick 5/26/2023 #2

就像已经解释过的那样,您需要阅读 IPC - 有很多选择。但是,从您的“发布”意图来看,我认为您可以使用一个简单的文件来完成。在循环中的一个进程中使用该 function() 返回值更新它。因此,系统上的所有其他进程都可以读取它。