繁体   English   中英

在没有fork / exec,popen()和system()的情况下获取Linux信息

[英]Getting linux information without fork/exec, popen(), and system()

我想知道如何在不使用fork / exec,popen()和system()的情况下从C ++获取以下linux系统信息:

  1. 获取启动给定进程ID的进程的命令字符串(名称)。
  2. 向过程发送信号
  3. 捕获并显示我的程序收到的所有信号
  4. 获取任何给定进程名称的进程ID

任何提示将不胜感激。

非常感谢您的参与!

我相信1)的信息包含在/ proc / PID / cmdline中

如果您需要当前进程,则可以使用/ proc / self /-当您不知道pid时很方便。 我对C ++不太了解,但是在C中,您可以使用open和read syscall来做到这一点,从而避免了分叉。

我认为您还可以通过处理/ proc条目来完成许多其他答案。 我相信/ proc / PID / status也会告诉您有关被指定PID阻塞和忽略的信号。

编辑:为4考虑更多点,您可以递归地循环遍历/ proc中的pid条目以查找给定的进程名称-这是我可以想到的唯一方法,无需分叉(根据建议的其他方式从代码中调用“ ps”分叉/执行)。 您有避免叉的特殊原因吗?

  1. 进程的主要功能接收该位
  2. 杀死-即http://man7.org/linux/man-pages/man2/kill.2.html
  3. 见2
  4. 棘手的需要我思考
  1. 您可以从main打印argv [0]。 但这并不能总是有帮助,因为调用fork / exec可能会使启动程序替换为新程序。
  2. 您需要使用kill命令行程序或kill系统调用
  3. 检查手册页是否正确
  4. 我假设您的意思是可执行文件名称。 您可以执行以下操作,可能无法在所有Unix系统上使用,但应在Linux上使用。

    ps -ef | grep“程序名” | awk'{打印$ 2}'

暂无
暂无

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

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