通过正在运行的linux C进程的命令行数据打印

这个场景如下(没有可用的代码):一个linux进程永远在(1)循环中运行。 该过程在C / C ++(POSIX)中实现。 该过程将一些数据保存到std :: vector。

myvector.push_back("test1"); myvector.push_back("test1"); myvector.pop_back(); myvector.push_back("test1"); 

该过程运行并修改向量。 我正在寻找一种机制,将执行具有特定命令行参数的二进制文件时,将打印vector值。

假设这个过程叫做“myprocess”并且正在运行。 我想从一个新的shell执行相同的二进制文件,如./myprocess -debug,并打印STL容器的值。

任何想法? 什么是最好的机制(即打印另一个进程的内存)

通常,你不会“打印另一个进程的内存”。 你所做的是发送另一个进程的信号,要求它打印出矢量的内容。

为此,您可以使用POSIX信号 (例如SIGUSR1 )。

一个更灵活的方法是进程监听命名管道(或TCP端口)并接受命令。 一个这样的命令可以是打印出矢量的内容。

(要完成@aix的最后一个建议)

假设你有myprocess的来源,并能够加强它,你可以添加一些服务器功能。

例如,您可以将其设置为HTTP服务器(例如使用Onion HTTP服务器库 )来理解请求。 这些请求甚至可以包含一些脚本语言(如lua ),那么你会嵌入一个解释器来处理它们(例如在一个单独的线程中)。 在这种情况下,请注意同步问题(例如通过锁定互斥锁或读写锁定访问的数据)。

使用HTTP协议的优点是您可以使用浏览器来探测您的应用程序。 (但是,您可能需要处理会话,身份验证等)。

你也可以使用你自己的协议,或者RPC-XDR,Corba等等。

你也可以通过telnet接受单个请求(例如在Lua中)。

你可以使用posix shm将数据在外部可见的共享内存段中

一般来说,这样的规范变化需要一些软件结构的改变

细节可能并不简单…