场景如下(尚无可用代码):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容器的值。
有什么想法吗?什么是最好的机制(即打印另一个过程的记忆)
答案 0 :(得分:4)
通常,您不“打印其他进程的内存”。你所做的是向另一个进程发送一个信号,要求它打印出向量的内容。
为此,您可以使用POSIX signal(例如SIGUSR1
)。
更灵活的方法是让进程侦听命名管道(或TCP端口)并接受命令。一个这样的命令可能是打印出矢量的内容。
答案 1 :(得分:1)
(完成@aix的最后一个建议)
假设您拥有myprocess
的来源并且能够增强它,您可以在其中添加一些服务器功能。
例如,您可以将其设为HTTP服务器(例如,Onion HTTP server library)能够理解请求。这些请求甚至可能包含一些脚本语言(如lua),然后您将嵌入一个解释器来处理它们(例如,在一个单独的线程中)。在这种情况下,请注意同步问题(例如通过使用互斥锁或读写锁来锁定访问的数据)。
使用HTTP协议的优点是您可以使用浏览器探测应用程序。 (但您可能需要处理会话,身份验证等)。
您也可以使用自己的协议,或RPC-XDR,Corba等等。
你也可以接受单行请求(例如在Lua中),每行,telnet
。
您可以使用posix shm
将数据放在共享内存段外部通常,此类规范更改需要进行一些软件体系结构更改
细节可能不简单......