如何检查一个进程在Linux中是否是一个系统进程?

我的程序可以build议用户closures一个特定的进程,如果它消耗太多的内存(例如 – Firefox或铬)。

但是,在我的系统(Ubuntu 16.10 GNOME)中,像gnome-shell这样的一些系统特定的进程消耗了太多的内存。

我的客户不知道一个特定的过程是否可以closures。

我如何确定一个进程是否是一个系统进程(如gnome-shell),并避免closures它?

这是我如何获得PID和消耗最大内存的进程的名称:

 FILE * pipe = popen("ps aux --sort=-%mem | awk 'NR<=2{print $2}'", "r"); if(pipe) { char line[line_buf]; while(fgets(line, sizeof line, pipe) != NULL) { if(sscanf(line, "%d", &_pid) == 1) { _mem->pid = _pid; } } } pclose(pipe); if(_mem->pid != 0) { char command[128], pidname[40]; snprintf(command, sizeof command, "cat /proc/%d%s", _pid, "/comm"); FILE * _pipe = popen(command, "r"); if(pipe) { char line[line_buf]; fgets(line, sizeof line, _pipe); sscanf(line, "%s\n", pidname); } pclose(_pipe); strcpy(_mem->pname, pidname); } 

IIRC,Ubuntu 16已经是基于systemd的。 虽然这确实有一些问题,至少它清理了很多现有的文件。 实际上,您的系统进程由根系统进程管理。 这并不意味着他们都是PID 1的孩子。 systemd有一个更精致的模型。 特别是,它理解分支守护进程(其父母死亡),

您可以获得systemd服务的trereeist,包括systemd-cgls (Control Group LiSt)的PID,