GDB 如何实现将自己附加到正在运行的进程的壮举?
我需要类似的功能,我可以在其中向正在运行的进程发出 CLI 命令。例如,我可以查询进程内部状态,例如 show total_messages_processed?我如何构建对在 Linux 下向正在运行的进程发出命令的支持?
是否有一个库可以为正在运行的进程提供 CLI 通信能力,并且可以针对自定义命令进行扩展?
进程本身是用c++写的
最佳答案
GDB 不使用 CLI 与其调试对象通信;它使用 ptrace
系统调用/API。
CLI 的意思是“命令行界面”。进程间最简单的通信形式是stdin
/stdout
。这是通过管道实现的。例如:
ps -ef | grep 'httpd'
ps
的标准输出(这将是一个进程列表)连接到 grep
的标准输入,后者将逐行处理该进程列表输出行。
您是在编写这两个程序,还是想与一个已经存在的进程进行通信?如果没有上下文,我不知道“show total_messages_processed”是什么意思。
如果您只是想让程序传达一些状态,一个好的方法是 dd
所采用的方法:向进程发送 SIGUSR1
信号会导致它转储当前的状态统计到 stderr
并继续处理:
$ dd if=/dev/zero of=/dev/null&
[1] 19716
$ pid=$!
$ kill -usr1 $pid
$ 10838746+0 records in
10838746+0 records out
5549437952 bytes (5.5 GB) copied, 9.8995 s, 561 MB/s
关于c++ - 运行进程的 CLI 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13061647/