Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C在linux中处理进程_C_Linux_Process_Pid - Fatal编程技术网

使用C在linux中处理进程

使用C在linux中处理进程,c,linux,process,pid,C,Linux,Process,Pid,在使用linux时,我习惯于用bash编写脚本,但在用C编写linux脚本时,我是个新手 对于任务,我必须处理流程。对于一个有经验的程序员来说,没有什么困难,因为我只需要在某个目录中循环所有进程并获取基本信息 更准确地说,我在第一个参数中收到一个进程所在的dir(default/proc/),然后我必须打印该进程的名称、PID、PPID、处理器状态(S/R)、打开的文件数和线程数。必须对位于给定目录中的所有进程执行此操作,但如果存在第二个参数(开关-s PID),则仅打印位于接收PID子树中的进

在使用linux时,我习惯于用bash编写脚本,但在用C编写linux脚本时,我是个新手

对于任务,我必须处理流程。对于一个有经验的程序员来说,没有什么困难,因为我只需要在某个目录中循环所有进程并获取基本信息

更准确地说,我在第一个参数中收到一个进程所在的dir(default/proc/),然后我必须打印该进程的名称、PID、PPID、处理器状态(S/R)、打开的文件数和线程数。必须对位于给定目录中的所有进程执行此操作,但如果存在第二个参数(开关-s PID),则仅打印位于接收PID子树中的进程的进程信息。最后一个参数(p/n/t)指示必须选择的打印顺序。p按PID排序,i按进程名称排序,t按线程数排序

打印格式
printf(“%10s%5s%5s%2s%3s%3s\n”、“名称”、“PID”、“PPID”、“状态”、“文件”、“线程”)

现在我不是要你来代替我写所有的东西,所以我不付出任何努力,我只想走上正确的道路,如何解决问题,一些例子,解释


谢谢:)

您可以尝试以下方法:

  • 首先确定您正在搜索的目录,默认情况下
    /proc
  • 使用
    opendir
    获取
    /proc
  • 使用
    readdir
    /proc
    • 忽略不是目录或名称不是严格数字的实体
  • 此时,您只有进程的目录
  • 对于每个名称,请再次使用
    opendir
    。在每个目录中,您感兴趣的是
    stat
    ,可能还有子目录
    fd
当然还有很多资源: