繁体   English   中英

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

[英]print via the command line data of a running linux C process

情况如下(尚无可用代码):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这样的新外壳执行相同的二进制文件,并打印STL容器的值。

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

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

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

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

(完成@aix的最后建议)

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

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

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

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

您也可以通过telnet在每行上接受单个请求(例如,在Lua中)。

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

通常,这样的规范更改需要一些软件体系结构更改

详细信息可能并不简单...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM