2011-12-05 30 views
2

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

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

该过程运行并修改向量。我正在寻找一种机制,可以在使用特定命令行参数执行二进制文件时打印矢量值。

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

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

+0

考虑一个调试器 – Walter

+0

这是一个生产系统 – cateof

+0

这是否甚至编译? 'std :: vector'没有'pop()'成员函数。 –

回答

4

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

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

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

1

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

假设你有myprocess源,并能增强它,你可以添加在它里面的一些服务器的能力。

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

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

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

你也可以接受单个请求(例如在Lua),在每行,通telnet

,你可能把数据可见外使用posix shm

一般共享内存段这样的规格变化需要一些软件的架构改变

的细节可能不是简单的...