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

时间:2011-12-05 13:16:24

标签: c++ linux shared-memory

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

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

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

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

有什么想法吗?什么是最好的机制(即打印另一个过程的记忆)

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

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

假设您拥有myprocess的来源并且能够增强它,您可以在其中添加一些服务器功能。

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

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

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

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

您可以使用posix shm

将数据放在共享内存段外部

通常,此类规范更改需要进行一些软件体系结构更改

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