linux查看进程是哪个程序

昨天调试服务器的时候,发现有个进程一直卡着不动,我就想看看它到底是个什么鬼。
在Linux系统里,查进程对应的程序,我一般用两种方法。

第一种,用ps命令。
特别简单,比如想看所有进程的命令名,我就敲ps -e -o comm=-e,唰一下全出来了。
想看特定进程,比如PID是1 2 3 4 的那个,我就ps -p 1 2 3 4 -o comm=,马上就知道它是啥了。
要是想知道它完整怎么启动的,包括路径和参数,就用ps -p 1 2 3 4 -o cmd=。
这个命令特别顺手,啥时候都用得上。

第二种,通过/proc文件系统。
这个更直接,能看进程的详细信息。
首先得知道PID,我一般用ps -e | grep 进程名找,或者直接用pgrep 进程名直接给PID。
比如现在我想看nginx的路径,我就先pgrep nginx | head -1 拿到PID,然后cat /proc/$PID/cmdline就能看到启动命令,这个结果都是空字符分隔的字符串。
要是想看得更清楚,就用cat /proc/$PID/cmdline | tr '\0' '\n'换行显示。
还可以看它实际指向的路径,用ls -l /proc/$PID/exe,有时候是符号链接。
环境变量也能看,cat /proc/$PID/environ | tr '\0' '\n'。

上次我就是用这个方法查的那个卡着的nginx进程,发现它居然卡在打开一个很大的日志文件,然后我就知道问题出在哪了。
权限有时候是个麻烦事,要是想看别的用户的进程,就得用sudo。
还有就是进程要是结束了,/proc/PID/这个目录就没了,得抓紧时间。
容器里跑的进程还得用nsenter进命名空间里看。

总之,这两种方法都挺实用的,看情况用就行。
不过,我突然想到,为啥ps命令的-o选项后面加comm或者cmd不一样呢?comm是只显示命令名,而cmd是显示完整命令行?这里面是不是有啥区别?

linux查看进程属于哪个程序

哎哟,这Linux系统查看进程所属的程序嘛,其实挺简单,就几种方法,我给你详细说说。

先说最常用的ps-f命令,这玩意儿能给你详细展示进程信息,特别是那个CMD列,它直接告诉你进程是哪个程序在运行。
比如,你看这个输出:“UID PID PPID CSTIME TTY TIME CMD”,这里CMD就是关键,像这样:“root 1 2 3 4 1 0 1 0:00 ? 00:00:01 /usr/bin/python3 /app/script.py”。
这意思就是,进程号1 2 3 4 是root用户启动的,父进程号是1 0,启动时间是1 0点,运行状态是空闲,耗时1 秒,运行的程序是/usr/bin/python3 /app/script.py。

再说说pstree-a命令,这玩意儿能以树状图的形式展示进程关系,你看,像这样:“systemd ├─ nginx(nginx) └─ python3 /app/script.py”。
这里nginx和python3 /app/script.py就标明了它们各自运行的程序。

还有个top命令,启动后按c键切换显示模式,看看COMMAND列,它就会展示完整命令或程序路径。
你看这个输出:“PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND”,这里COMMAND列就明确显示了进程关联的程序,像这样:“1 2 3 4 root 2 0 0 1 0000 5 000 2 000 R 5 .0 0.1 1 0:00.01 python3 /app/script.py”。

不过,要注意哦,如果程序是通过解释器(比如Python、Bash)运行的,CMD或COMMAND列可能就会显示解释器路径及脚本名,比如“python3 script.py”。
还有一些系统进程可能只显示二进制路径,像“/usr/lib/systemd/systemd”,这种情况下,你可能得用file命令进一步分析。

如果想看更底层的信息,比如可执行文件位置,那你可以通过/proc//exe符号链接获取,比如“ls -l /proc/1 2 3 4 /exe”。

就这么几个方法,涵盖了从快速查询到详细分析的不同场景,你根据需要选着用就成啦。
说实话,我当时也没想明白这么复杂,但用熟了就很简单了。

linux查看进程状态的命令

说实话,用Linux看进程状态这事儿吧,我当年刚接手服务器那会儿,简直是噩梦。
黑屏上密密麻麻的字符,CPU、内存、PID全挤一块儿,看得我头大。
好在后来慢慢摸透了几个命令,现在随便哪个都能秒出来。
下面我跟你唠唠这几个命令,都是真金白银用过的。

先说ps,这绝对是基础中的基础。
记得第一次用ps-a看所有进程,嚯,好家伙,屏幕上飘着一大堆"Z"状态的僵尸进程,当时我还纳闷"这玩意儿咋还在那儿占着"。
后来才知道加个-o state参数就能过滤掉。
最常用的还是ps-ef,特别适合写脚本,参数简单直接。
不过你要是想知道某个进程的启动参数,就得用ps-f了。
我上次查过nginx的启动参数,得用ps-f-p1 2 3 4 ,参数全列出来了,比cat /proc/1 2 3 4 /environ强多了。

top这玩意儿我简直离不开了。
刚开始用的时候,发现它居然能实时刷新,还支持交互式操作。
记得有个次半夜排查缓存问题,直接top-uhttpd开干,Shift+M一按,内存最高的进程立马跳到前面。
最绝的是用top-b重定向到文件,省得手忙脚乱Ctrl+Shift+6 截图。
不过要注意,top默认按CPU排序,有时候得用-o time把时间排序,这样看进程存活时间才准。

要说最直观的,还得是pstree。
我上次在监控系统挂了的时候,用pstree-p直接把进程树打印出来,父子关系一目了然,比看ps出的列表强多了。
特别适合看init进程下面挂了哪些子进程,搞清楚哪个环节出问题。

至于pidstat和iostat,这两货得装sysstat包。
我有个客户机子,CPU飙到1 00%找半天,最后用pidstat-u1 发现是个Python脚本跑死了,居然没产生任何日志。
iostat-x1 看磁盘I/O也超实用,有个服务器经常随机I/O爆表,用这个一看就知道是SSD寿命要到了。
不过要注意,iostat的输出格式不同版本可能不一样,我建议用-i参数保持稳定。

现在总结一下:要是想快速看进程列表,ps-ef绝对够用;要实时监控,top配合Shift+M玩玩;要搞清楚进程层级,pstree跑个图;要深究性能问题,pidstat和iostat不能少。
每个命令都有用武之地,关键得知道在什么场景下用对招。
这玩意儿吧,用多了自然就熟了,就像当年我第一次用grep的时候,觉得这玩意儿比ps还难用,现在闭着眼睛都能写个grep -r "error" /var/log了。

linux查看进程的命令是什么

哎,我以前在使用Linux系统的时候,那真是头疼啊,记得2 02 2 年那个夏天,我在某个城市,那时候我在用ps命令,那个命令啊,它就那么默默地在后台运行,我一看,这进程这么多,PID、命令行参数、用户、CPU使用率、内存使用率,信息量太大了,我当时也懵,后来才反应过来,这个命令还挺有用的。

然后我又试了top命令,那个交互式进程监视器,它实时显示进程活动,CPU使用率、内存使用率,一目了然。
我就那么盯着屏幕,看着进程一个一个地冒出来,心里想着,这玩意儿还挺有意思的。

再后来,我用pgrep命令,这个命令通过名称搜索进程,输出指定进程的PID,我那时候就想着,这个命令可以用来快速找到进程的PID,挺方便的。

还有pidof命令,跟pgrep有点像,也是通过名称搜索进程的PID,不过它输出的结果是以空格分隔的列表形式,我当时就挺喜欢这个列表的,因为它看起来挺整齐的。

还有那个pstree命令,这个命令以树形结构显示进程层次结构,展示了父进程和子进程之间的关系,我当时用这个命令,看着那些进程就像一棵树一样,根根枝枝,一目了然。

最后,我用了kill命令,这个命令可厉害了,它可以向进程发送信号,我那时候就想着,这个命令可以用来结束那些该死的进程,于是我就kill-9 PID,把那些进程都给杀掉了。

哎,现在回想起来,那时候用Linux系统,真是酸甜苦辣,各种滋味都有。