linux平臺下C語言按程式名查詢程式號pid

Koma_Wong發表於2018-09-15

首先建立一個while迴圈可執行檔案

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        while(1);
}

編譯執行:

$ gcc forever.c -o forever
$ ./forever.exe &

檢視程式編號:

$top
top - 09:59:45 up 21 days, 11:02,  0 users,  load average: 2.94, 2.40, 1.79
任務:   5 total,   2 running,   3 sleeping,   0 stopped,   0 zombie
%Cpu0  :  13.9/3.0    17[|||||||||                                            ]
%Cpu1  :  33.7/1.0    35[|||||||||||||||||||                                  ]
%Cpu2  :  26.7/2.0    29[|||||||||||||||                                      ]
%Cpu3  :  29.7/1.0    31[|||||||||||||||||                                    ]
GiB Mem : 54.7/3.945    [                                                     ]
GiB Swap:  2.1/1.375    [                                                     ]

進▒ USER      PR  NI    VIRT    RES  %CPU %MEM     TIME+ ▒ COMMAND
  996 toa      0   0    3.4m   4.0m  99.9  0.1   0:26.04 R forever

是996沒錯了!

然後編寫一個可以執行命令列的C語言函式

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char *argv[])
{
	char cmd[256];
	memset(cmd, 0, 256);
	
	pid_t pid = getpid();
	
	if(argc < 2)
	{
		printf("Usage: ./a.exe <pid name>\n");
		return -1;
	}
	
	sprintf(cmd, "ps -e | grep %s | awk '{print $1}'", argv[1]);
	
	system(cmd);
	
	return 0;
}

編譯執行:

$ gcc a.c
$ ./a.exe forever
996

 

相關文章