怎么查找LINUX的用户进程和后台进程的详细信息!谢谢了

怎么查找LINUX的用户进程和后台进程的详细信息!谢谢了,第1张

top命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,默认5秒刷新一下进程列表,所以类似于 Windows 的任务管理器。

一、系统整体当下的统计信息

top命令显示的前五行是系统整体的统计信息。

第一行是任务队列信息,同uptime命令的执行结果。eg

top  -  15:09:51  up  17  days  ,  3:38  ,  4  users  ,  load  average  :  109  ,  339  ,  476

15:09:51  当前时间

 up 17 days , 3:38  系统运行时间,格式为时:分

 4  users  当前登录用户数

 load average : 109 , 339 , 476  系统负载,即任务队列的平均长度。

 三个数值分别为1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。eg

Tasks  :  115  total  ,  1  running  ,  114  sleeping  ,  0stopped  ,  0zombie

 Cpu(s)  :  161%  us  ,  20%  sy  ,  00%  ni  ,  795%  id  ,  14%  wa  ,  00%  hi  ,  10%  si

Tasks : 115 total  进程总数

 1 running  正在运行进程数

 114  sleeping  睡眠进程数

 0  stopped  停止进程数

 0  zombie  僵尸进程数

 Cpu(s) : 161%  us  用户空间占用CPU百分比

 20%  sy  内核空间占用CPU百分比

 00%  ni  用户进程空间内改变过优先级的进程占用CPU百分比

 795%  id  空闲CPU百分比

 14%  wa  等待输入输出的CPU时间百分比

 00%  hi

 00%  si

最后两行为内存信息。eg

Mem  :  8169876  k  total  ,  7686472  k  used  ,  483404  k  free  ,  35272  k  buffers

 Swap  :  4096532  k  total  ,  160  k  used  ,  4096372  k  free  ,  2477532  k  cached

Mem : 8169876 ktotal  物理内存总量

 7686472 k used  使用的物理内存总量

 483404 k free  空闲内存总量

 35272 k buffers  用作内核缓存的内存量

 Swap : 4096532 k total  交换分区总量

 160 k used  使用的交换区总量

 4096372 k free  空闲交换区总量

 2477532 k cached   缓冲的交换区总量。

内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。

二、进程信息

统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

PID    USER    PR    NI    VIRT    RES    SHR    S    %CPU    %MEM    TIME+    COMMAND

序号列名含义

 PID    进程id

 PPID    父进程id

 RUSER    Realusername

 UID    进程所有者的用户id

 USER    进程所有者的用户名

 GROUP    进程所有者的组名

 TTY    启动进程的终端名。不是从终端启动的进程则显示为

 PR    优先级

 NInice     值。负值表示高优先级,正值表示低优先级

 P    最后使用的CPU,仅在多CPU环境下有意义

 %CPU    上次更新到现在的CPU时间占用百分比

 TIME    进程使用的CPU时间总计,单位秒

 TIME+    进程使用的CPU时间总计,单位1/100秒

 %MEM    进程使用的物理内存百分比

 VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

 SWAP    进程使用的虚拟内存中,被换出的大小,单位kb。

 RES    进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

 CODE    可执行代码占用的物理内存大小,单位kb

 DATA    可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb

 SHR    共享内存大小,单位kb

 nFLT    页面错误次数

 nDRT    最后一次写入到现在,被修改过的页面数。

S    进程状态。

 D=    不可中断的睡眠状态

 R=    运行

 S=    睡眠

 T=    跟踪/停止

 Z=    僵尸进程

COMMAND    命令名/命令行

 WCHAN    若该进程在睡眠,则显示睡眠中的系统函数名

 Flags    任务标志,参考schedh

获取系统进程要使用CreateToolhelp32Snapshot()函数得到快照,然后进行遍历,取出自己想要的信息就可以了。下面是我自己写的一个由进程名称得到进程ID的函数,要得到所有的进程,你只要把循环进行完就行。上代码:

DWORD CXXXDlg::GetProeccIDByName(CString& csProName)

{

//AddOutPut()是我自己封装的调试函数,可以不用理会

//使用CreateToolhelp32Snapshot()等函数要包含头文件

//#include <TlHelp32h>

 AddOutPut(_T("->由进程名字得到进程ID开始"));

 if (csProNameIsEmpty())

 {

  AddOutPut(_T("!!由进程名字得到进程ID失败,进程ID名字为空!"));

  return 0;

 }

 HANDLE hSnapShot = NULL;

 hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

 if (INVALID_HANDLE_VALUE == hSnapShot)

 {

  AddOutPut(_T("!!由进程名字得到进程ID失败,创建快照失败!"));

  return 0;

 }

 int nPos = csProNameReverseFind('\\');

 csProName = csProNameRight(csProNameGetLength() - nPos);

 PROCESSENTRY32 proEntry32 = {0};

 bool bRetval = false;

 bool bFind = false;

 proEntry32dwSize = sizeof(PROCESSENTRY32);

 bRetval = Process32First(hSnapShot, &proEntry32)  true : false;

 while (bRetval)

 {

  if (0 == StrCmpI(proEntry32szExeFile, csProName))

  {

   bFind = true;

   break;

  }

  bRetval = Process32Next(hSnapShot, &proEntry32)  true : false;

  proEntry32dwSize = sizeof(PROCESSENTRY32);

 }

 if (!bFind)

 {

  AddOutPut(_T("!!由进程名字得到进程ID失败,未找到该进程!"));

  return 0;

 }

 if (hSnapShot != NULL)

 {

  CloseHandle(hSnapShot);

 }

 AddOutPut(_T("->由进程名字得到进程ID成功"));

 return proEntry32th32ProcessID;

}

查看Linux中所有正在运行的进程 ,可以参考如下方法:

1、通过ps命令的-A或者-e参数来获取系统中所有的进程,这两个参数的作用一样的。

2、通过top命令来获取系统中所有的进程任务 。执行top命令后,在tasks一栏会看到总的任务数。

你可以获取到进程的EXE路径吧。你所画的那个描述列实际上只是文件属性的一部分。

获取文件描述可以看这里。>

dim src,i,info,sum

set src=getobject( "winmgmts:root/cimv2" )execquery("select from win32_service" )

set fso=createobject("scriptingfilesystemobject")

for each i in src

sum=clng(30-len(iname)+len(istate))

info=info&iname&string(sum,chr(32))&istate&chr(13)

next

if right(info,1)=chr(13) then info=left(info,len(info)-1)

fsocreatetextfile("save_Servicesinfotxt")write info

1、首先打开xshell软件,连接上linux服务器,使用指令ps查看系统进程,参数a表示全部,u表示以用户格式显示,x表示进程参数。

2、接着通过符号|加上grep查找具体的某个进程,如下图所示。

3、然后输入ps -ef用于查看进程的父进程id,如下图所示。

4、最后使用pstree指令查看进程树结构,如下图所示就完成了。

itjob老师教过用命令的方式也是很方便将结果存到变量里呀,用一个复制或者重定向就行了。

c代码:

#include <pthreadh>

#include <stdioh>

void print_xs (void unused)

{

while (1)

fputc (‘x’, stderr);

return NULL;

}

/ The main program /

int main ()

{

int i=0;

while(1){

pthread_t thread_id;

if( NULL != pthread_create (&thread_id, NULL, &print_xs, NULL)){

break;

}

i++;

}

printf("创建线程个数:%d\n",i);

return 0;

}

以上就是关于怎么查找LINUX的用户进程和后台进程的详细信息!谢谢了全部的内容,包括:怎么查找LINUX的用户进程和后台进程的详细信息!谢谢了、mfc 获取系统进程的过程、如何在Linux中查看所有正在运行的进程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9586890.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存