linux中自己编写ps命令行
-
在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年前 -
在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年前 -
在Linux中,我们可以使用C语言编写自己的ps命令行程序。下面是编写ps命令行程序的步骤和操作流程:
1. 创建一个新的C文件,例如ps.c,用于编写ps命令行程序的代码。
2. 在ps.c文件中添加头文件和定义变量:
“`c
#include
#includeint 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年前