linux中自己编写ps命令行

worktile 其他 20

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在Linux中,我们可以通过编写shell脚本来自定义一个类似于ps命令的程序。下面是一个简单的示例:

    “`bash
    #!/bin/bash

    # 获取进程ID和进程名
    get_process_info() {
    local pid=$1
    local pname=$(cat /proc/$pid/cmdline | tr -d ‘\000’ | cut -d ” ” -f 1)

    echo “PID: $pid, Name: $pname”
    }

    # 遍历/proc目录下的所有进程
    traverse_processes() {
    echo “Process List:”

    for pid in $(ls /proc | grep ‘^[0-9]’)
    do
    if [ -d “/proc/$pid” ]; then
    get_process_info $pid
    fi
    done
    }

    # 主函数
    main() {
    traverse_processes
    }

    main
    “`

    以上脚本中使用了两个函数,`get_process_info`用来获取进程的ID和名称,`traverse_processes`用来遍历`/proc`目录下的所有进程,并调用`get_process_info`函数来获取进程信息。

    要使用这个自定义的ps命令,首先将脚本保存为一个文件(比如`my_ps.sh`),然后给予执行权限:

    “`bash
    chmod +x my_ps.sh
    “`

    最后,直接运行该脚本即可:

    “`bash
    ./my_ps.sh
    “`

    运行结果将会显示当前系统中所有进程的ID和名称。

    请注意,这只是一个简单的示例,实际的ps命令有更多的功能和选项。但是通过编写自定义的ps命令,你可以根据自己的需求添加更多的功能和选项。希望你能从这个示例中得到一些启发,自己进一步扩展和完善。

    2年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    在Linux中,我们可以创建自己的ps命令行。下面是一个简单的示例,这个示例会列出当前系统上所有正在运行的进程的一些基本信息:

    1. 导入所需的头文件:
    “`c
    #include
    #include
    #include
    #include
    “`

    2. 创建一个函数,用于解析进程的信息:
    “`c
    void print_proc_info(char* pid) {
    // 打开进程的状态文件
    char path[100];
    sprintf(path, “/proc/%s/status”, pid);
    FILE* file = fopen(path, “r”);
    if (file == NULL) {
    return;
    }

    // 从文件中读取进程的信息并打印
    char line[256];
    while (fgets(line, sizeof(line), file)) {
    if (strncmp(line, “Name:”, 5) == 0) {
    printf(“%s”, line);
    }
    if (strncmp(line, “State:”, 6) == 0) {
    printf(“%s”, line);
    }
    if (strncmp(line, “PPid:”, 5) == 0) {
    printf(“%s”, line);
    }
    // … 根据需要添加更多的信息
    }

    // 关闭文件
    fclose(file);
    }
    “`

    3. 创建一个函数,用于遍历系统上所有的进程:
    “`c
    void list_processes() {
    // 打开进程目录
    DIR* directory = opendir(“/proc”);
    if (directory == NULL) {
    return;
    }

    // 读取进程目录中的每一个项
    struct dirent* entry;
    while ((entry = readdir(directory)) != NULL) {
    // 如果项是一个目录且名称为纯数字,则认为是一个进程目录
    if (entry->d_type == DT_DIR && atoi(entry->d_name) != 0) {
    // 打印进程的信息
    printf(“PID: %s\n”, entry->d_name);
    print_proc_info(entry->d_name);
    printf(“=========\n”);
    }
    }

    // 关闭目录
    closedir(directory);
    }
    “`

    4. 编写主函数,调用list_processes函数即可列出所有进程的信息:
    “`c
    int main() {
    list_processes();
    return 0;
    }
    “`

    将以上代码保存为一个名为myps.c的文件,并通过以下命令进行编译和运行:
    “`
    gcc myps.c -o myps
    ./myps
    “`

    这样,就可以自己编写并运行一个类似于ps命令的实现。当然,以上代码只是简单地演示了如何获取进程的一些基本信息,你也可以根据需要进行扩展和修改。

    2年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在Linux中,我们可以使用C语言编写自己的ps命令行程序。下面是编写ps命令行程序的步骤和操作流程:

    1. 创建一个新的C文件,例如ps.c,用于编写ps命令行程序的代码。

    2. 在ps.c文件中添加头文件和定义变量:
    “`c
    #include
    #include

    int main() {
    DIR *dir;
    struct dirent *entry;
    // 其他变量定义
    // …
    }
    “`

    3. 在main函数中,使用opendir函数打开/proc目录,以便读取进程信息:
    “`c
    dir = opendir(“/proc”);
    if (dir == NULL) {
    perror(“opendir() error”);
    return 1;
    }
    “`

    4. 使用readdir函数遍历/proc目录下的每个进程文件夹,并读取进程信息:
    “`c
    while ((entry = readdir(dir)) != NULL) {
    if (entry->d_name[0] >= ‘0’ && entry->d_name[0] <= '9') { // 获取进程ID,并进行处理 // ... }}```5. 在获取到进程ID之后,可以打开对应的进程状态文件(/proc/[PID]/stat)并读取相关信息,例如进程状态、进程名等:```cchar stat_file_path[128];sprintf(stat_file_path, "/proc/%s/stat", entry->d_name);
    FILE *stat_file = fopen(stat_file_path, “r”);
    if (stat_file == NULL) {
    perror(“fopen() error”);
    return 1;
    }
    “`

    6. 从进程状态文件中读取数据,并进行处理(例如提取进程名、进程状态等):
    “`c
    // 读取进程状态信息
    fscanf(stat_file, “%d %*s %c”, &pid, &state);
    // 提取进程名
    // …

    // 其他处理
    // …
    “`

    7. 最后,可以将读取到的进程信息输出到终端或者保存到文件中:
    “`c
    printf(“PID: %d\n”, pid);
    printf(“State: %c\n”, state);
    // 输出其他信息
    // …

    // 其他输出等处理
    // …

    fclose(stat_file);
    “`

    8. 编译和运行程序:
    “`bash
    gcc -o ps ps.c
    ./ps
    “`

    以上是在Linux中自己编写ps命令行程序的基本步骤和操作流程。可以根据自己的需求对程序进行扩展和优化,例如添加更多的进程信息、支持更多参数等。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部