精华内容
下载资源
问答
  • 怎么通过pid查找进程
    千次阅读
    2021-10-15 16:24:50

    ps -aux |grep -v grep|grep PID

    更多相关内容
  • 如果您知道进程的名称,则可以使用 ps 命令轻松获取其进程 ID (PID): ps -p PID -o comm= ps 命令用于进程相关的操作,在上面的命令中,-p PID提供进程 ID 并-o comm=要求它输出与给定 PID 关联的命令。 这是一个...

    如果您知道进程的名称,则可以使用 ps 命令轻松获取其进程 ID (PID):

    ps -p PID -o comm=
    

    ps 命令用于进程相关的操作,在上面的命令中,-p PID提供进程 ID 并-o comm=要求它输出与给定 PID 关联的命令。

    这是一个实际的例子:

    老实说,很难记住奇怪的ps -p PID -o comm=语法,如果是这种情况,您可以查看 ps 命令的手册页或使用其他方式获取详细信息。

    您可以使用 ps 命令或 top 命令列出所有正在运行的进程,并根据需要记下进程 ID 和进程名称。

    如果您知道 PID,则可以简单地使用 grep 命令过滤输出并获取该 PID 的详细信息:

    ps aux | grep PID
    

    但如下图所示,输出提供了其他详细信息以及进程名称。

    如果您手动阅读它,那不是问题,但是,如果您必须在脚本中使用它,这可能是个问题。

    ps -p PID -o comm=是更好的命令。

    额外提示:既然我们在谈论进程名称和 PID,让我快速向您展示相反的方法,即从进程名称中找到 PID。

    有一个名为的专用命令pidof,如果您知道确切的进程名称,则可以像这样使用它:

    pidof exact_process_name
    
    展开全文
  • 通过pid查找进程task_struct结构体

    千次阅读 2018-04-12 20:23:58
    如何通过进程id查找进程的描述符task_struct?在实际的工作中,我的驱动中需要通过读取写进内存中的进程id值查找对应的进程是否还在运行,或者是已经退出。通过阅读内核代码,内核中已有相应的API函数来供我们使用。...

        如何通过进程id查找进程的描述符task_struct?在实际的工作中,我的驱动中需要通过读取写进内存中的进程id值查找对应的进程是否还在运行,或者是已经退出。通过阅读内核代码,内核中已有相应的API函数来供我们使用。下面是我在使用过程中的一些笔记总结。

        linux系统上运行的进程可能成百上千的,或者更多,如何能够快速的通过pid值反向的查找task_struct,内核的方法是通过Hash散列表的方式。下面结合3.16.7内核版本来分析pid hash表的实现。

    void __init pidhash_init(void)  

    {  

            unsigned int i, pidhash_size;  

      

            pid_hash = alloc_large_system_hash("PID", sizeof(*pid_hash), 0, 18,  

                                                                            HASH_EARLY | HASH_SMALL,  

                                                                            &pidhash_shift, NULL,  

                                                                            0, 4096);  

            pidhash_size = 1U << pidhash_shift;  

      

            for (i = 0; i < pidhash_size; i++)  

                    INIT_HLIST_HEAD(&pid_hash[i]);  

    }

        pidhash_init函数在系统启动时由start_kernel函数调用。Pid hash表的大小由运行机器的总内存数决定,范围在16~4096个之间。在之前老的内核(如2.6.12.6)pid hash表包含四个表,分别针对enum pid_type的四种不同类型PID的情况。

        进程创建时,是如何将task_struct与pid_hash散列表关联起来的?在copy_process函数中会判断参数pid指针是否等于init_struct_pid,如果不相等,就会调用alloc_pid函数分配一个新的struct pid类型的pid实例,并初始化。如果相等,说明是idle进程的创建。一般情况下,pid指针为空。下面看下alloc_pid函数的实现:

    struct pid *alloc_pid(struct pid_namespace *ns)  

    {  

            pid = kmem_cache_alloc(ns->pid_cachep, GFP_KERNEL);   

      

            tmp = ns;  

            pid->level = ns->level;  

            for (i = ns->level; i >= 0; i--) {  /*遍历pid namsespace*/

                    nr = alloc_pidmap(tmp);  

      

                    pid->numbers[i].nr = nr;  

                    pid->numbers[i].ns = tmp;  

                    tmp = tmp->parent;  

            }  

     

            for (type = 0; type < PIDTYPE_MAX; ++type)  

                    INIT_HLIST_HEAD(&pid->tasks[type]);  /*初始化每个id类型的散列表头*/

     

            upid = pid->numbers + ns->level;  

            spin_lock_irq(&pidmap_lock);  

            for ( ; upid >= pid->numbers; --upid) {  

                    hlist_add_head_rcu(&upid->pid_chain,  

                                                       &pid_hash[pid_hashfn(upid->nr, upid->ns)]);  

                    upid->ns->nr_hashed++;  

            }  

            spin_unlock_irq(&pidmap_lock);  

        参数ns参数是创建新进程时父进程task_struct描述符的命名空间指针nsproxy的pid namespace,一般情况下是指向init_pid_ns,如果在clone时候有指定CLONE_NEWPID标志,则会在copy_process中调用alloc_pid之前调用copy_namespaces创建一个新的pid namespace。

        函数首先调用kmem_cache_alloc从slab中分配pid内存。上面讲到如果clone时有指定标志CLONE_NEWPID的情况下,会创建一个新的pid namespace,此新建的pid namespace的parent指向父进程的pid namespace,相应的level也加一。这个新建的进程对于新创建的pid namespace和父进程的pid namespace,以及更初始的pid namespace都是可见的

        在第一个for循环中,从新创建PID namespace的level(此成员表示可以看到该进程的命名空间的数目)到0,给每个可见此进程的命名空间都分配一个局部的pid值。并将新分配的局部pid值nr赋给PID描述符的对应的命名空间numbers的nr字段,将pid namespace指针tmp赋给对应的命名空间numbers的ns字段。

        struct pid结构体中成员tasks是一个数组,每个数组成员是一个散列表的表头,对应于pid_type枚举中的一个id类型。在第二个for循环中,初始化tasks数组对应的每个id类型的散列表头。

        Pid结构体的成员numbers,虽然是一个长度为1的数组,但是因为它是在结构体的最后,可以根据pid所属的空间的个数分配更多的空间。numbers数组的大小由pid->level字段决定。Level值越大的命名空间级别越低,它能够被此pid的level值更小的命名空间看见,也就是说父命名空间能给看到子命名空间,反之子命名空间不能看见父命名空间。

        代码这里首先将upid指向此pid描述符的级别最低的命名空间,然后在for循环中遍历每层的命名空间,以当前pid namespace的进程id值nr和命名空间指针ns为key值,调用pid_hashfn函数生成pid_hash全局数组中的bucket id值,并将此进程链入此bucket id所在的hash散列表中。


        上面是alloc_pid函数分配一个新的pid描述符的大致过程,接着回到copy_process函数看看创建新进程的余下的和pid hash相关的代码。

    copy_process函数代码片段

    if (likely(p->pid)) {  

            init_task_pid(p, PIDTYPE_PID, pid);  

            if (thread_group_leader(p)) {  /*进程是线程组的组长*/

                    init_task_pid(p, PIDTYPE_PGID, task_pgrp(current));  

                    init_task_pid(p, PIDTYPE_SID, task_session(current));  

     

                    attach_pid(p, PIDTYPE_PGID);  

                    attach_pid(p, PIDTYPE_PGID);   

            } else {  

     

            }  

            attach_pid(p, PIDTYPE_PID);  /*PIDTYPE_PID类型的pid插入到相应的链表中*/

    }

        如果前面alloc_pid创建新的pid成功或者本身没有指定CLONE_NEWPID标志,就会进入上述代码片段执行。前面讲到枚举类型pid_type的不同id类型,在我分析的新内核(3.16.7)中是三种:

    PIDTYPE_PID     对应进程PID

    PIDTYPE_PGID    进程组领头进程PID

    PIDTYPE_SID    会话领头进程PID

        首先调用函数init_task_pid初始化新创建进程的类型PIDTYPE_PID的pid实例,如果此新创建的进程是线程组的组长,则初始化此进程的PIDTYPE_PGID类型和PIDTYPE_SID类型的实例,并且调用attach_pid函数将此进程进行Hash,加入到已经初始化好的pid_hash对应bucket的散列表中。

        这样就建立起了一个双向链表的关系,进程可以通过task_struct的task->pids[type]的成员pid访问pid实例,pid实例也可以通过遍历tasks[type]链表来查找进程task_struct。

        经过上面的分析,一个进程可以属于多个不同的命名空间,同一个进程在不同的命名空间中有不同的局部pid值,多个进程task_struct可以共用一个pid描述符。


    展开全文
  • 进程号用于按 ID 或映像名称列出和查找进程的 Windows 命令行。 使用或更高版本构建。用法pid - 列出所有进程和各自的进程 ID。 pid <image> - 列出所有图像名称匹配或包含进程。 不区分大小写。 pid <process> - ...
  • 反过来 ,相同通过PID查找进程名则没有相关命令。在linux根目录中,有一个/proc的VFS(虚拟文件系统),系统当前运行的所有进程都对应于该目录下的一个以进程PID命名的文件夹,其中存放进程运行的N多信息。其中有一个...
  • # 查看端口占用情况 netstat -ano ...# 根据 PID 查找相应的进程名,16496 是 PID,就在 netstat 展示结果的最后一列 tasklist | findstr 16496 # 杀死进程 taskkill /PID 16496 有帮助的话欢迎评论转发 ...
    # 查看端口占用情况
    netstat -ano
    
    # 查找指定的端口,通过管道符 | 进行过滤,8000 是端口号
    netstat -ano | findstr 8000
    
    # 查看进程列表
    tasklist
    
    # 根据 PID 查找相应的进程名,16496 是 PID,就在 netstat 展示结果的最后一列
    tasklist | findstr 16496
    
    # 杀死进程
    taskkill /PID 16496
    

    有帮助的话欢迎评论转发

    展开全文
  • 工作环境中遇到网络不正常,检测是某服务器异常往外发送数据包,使用netstat命令查看,发现有程序。这篇文章主要介绍了linux根据进程PID查找启动程序的全路径,需要的朋友可以参考下
  • GPU 根据PID号查看对应的进程

    千次阅读 2022-01-12 10:12:20
    问题描述: GPU 根据PID号查看对应的进程 解决方案: 查看对应程序的PID号 nvidia-smi 假设此处查到的PID号是28990 通过以下命令查看PID对应的程序 ps -aux |grep -v grep|grep 28990
  • 通过PID进程查找启动程序全路径

    千次阅读 2021-11-19 12:24:03
    1、通过netstat -lntp可以查看到系统正在运行的进程,也是可以看到对应进程PID号 2、如上图中,如果想知道mysqld进程启动程序的全路径的话,可以通过下面的方法: 截图中mysqld的进程号是1636,进入/...
  • 今天部署 prometheus 发现端口被占用了,寻思刚配置文件就OK了然后开始查找哪个进程, 先使用 netstat -anop | grep 9100查看进程ID 根据进程ID 使用 ps aux 命令查看 该进程的信息 本来想修改下配置文件就OK了,...
  • Linux通过PID查看进程完整信息

    千次阅读 2021-09-05 12:21:12
    Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过ll或ls –l命令即可查看。 ll /proc/PID image 解释 ...
  • 拿name为yq-graphql-user的项目为例,我们想要查询该项目的所在目录,可如下执行: #首先根据pid进入到相关目录 cd /proc/29539(pid) ls -ail 如图可看到该项目的目录位置,进而我们就能确定这到底是哪个项目啦~ ...
  • 该代码为windows下遍历进程并输出进程名,PID进程路径,由C++编写,运行成功
  • Linux通过PID号找到对应的进程

    千次阅读 2021-06-15 11:48:08
    有时候通过top命令查看Linux的系统运行情况时,会发现一些进程占用的CPU或者内存有点大,所以这时候想知道到底是哪个进程占用了这么多的CPU或者内存,分享下步骤: top命令查看系统运行情况,如下: 会发现cpu...
  • 前言 参考:linux - CoreOS - get docker container ...下面介绍通过进程查找所属容器的方法。 PS:其实之前刷 github 刷到一个好像是叫 背锅侠 还是之类的 repo 可以做类似的事情,可惜后来找不到了。 系统环境:
  • 您通常会在Redhat / CentOS风格的系统上的/ var / run /中找到daemonized进程PID文件.除此之外,您始终可以查看进程init脚本.例如,SSH守护程序是使用/etc/init.d/sshd中的脚本启动的.有时会在那里定义PID(搜索pid,...
  • 使用linux操做系统,不免遇到一些软件"卡壳"的问题,这时就须要使用linux下强大...首先,咱们须要使用linux下另一个ps命令查找进程相关的PID号:ps aux | grep program_filter_wordps a 显示现行终端机下的全部程...
  • linux通过pid查看进程信息

    千次阅读 2021-06-10 09:49:12
    有时候通过top命令可以看到有个别进程占用的内存比较大,但是top无法直接查看到进程名以及进程所在的目录。所以我们可以通过以下方法来定位。  首先需要知道PID号,可以通过top命令获取。  然后我们可以用ps看...
  • 根据进程号(PID)查找进程的所在目录

    千次阅读 2020-04-28 11:24:05
    cd /proc/6482 ls -ail cwd -> 进程目录 如图中cwd -> /home/XXX/tomcat8.5/bin
  • 查找进程对应的PID和对应的端口号

    千次阅读 2021-08-18 15:36:57
    查找电脑运行的进程对应的PID和对应的端口号 步骤一:打开任务管理器 → “详细信息” → “PID” 以 PID 为 3544 的进程为例 步骤二:“win + R” → 输入“cmd” 打开命令提示符 → 输入命令“netstat -...
  • cmd下获取指定进程名的pid号,并通过taskkill结束该进程
  • linux 系统下通过 pid 查看相关进程信息的方法
  • linux如何查看某个pid进程?

    千次阅读 2021-05-09 04:58:22
    Linux通过PID查看进程完整信息[root@gsidc-4q-saas23 ~]# netstat -anp|grep 8282tcp 0 0 :::8282 :::* LISTEN 16923/java[root@gsidc-4q-saas23 ~]# ps -ef|gre...
  • Ubuntu便捷查找进程pid号以及批量关闭指定进程的方法 1. 查找指定进程的PID号 打开终端,输入: ps | aux grep [target] 出现的数字就是PID号,如果只有一个,可以直接调用kill [pid index]杀死指定PID号的程序。 2...
  • Windows根据TCP端口号查找进程PID再kill进程

    千次阅读 多人点赞 2019-05-14 23:56:11
    Windows根据TCP端口号查找进程PID再kill进程 Windows环境下,有时候TCP端口莫名其妙的被占用,导致正常的网络端口绑定失败,比如Android开发中,adb无法识别,有时候原因就是端口被占用。Java开发中,端口在占用...
  • 在windows系统环境下 ,通过进程名称查看该进程是否存在,存在的话 taskkill结束进程。 public class ProcessUtil { private static final Log logger = LogFactory.getLog(ProcessUtil.class); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 116,421
精华内容 46,568
关键字:

怎么通过pid查找进程