pidof

   
我们清楚种种女孩儿一出生就能三个全国独一的号子来对其进展标志,用于以后上学,办社会养老保险等,便是大家的身份ID号。那么在Linux系统中,用来管理运作程序的标志叫做PID,就是我们熟识的进程ID。那么怎么样来找到程序的PID了,那么就须要用到命令pidof,其作用主要用来查阅运转程序的PID。

萨姆ba与window连接必要使用NetBIOS左券,请确认你的Win7系统现已安装了NetBIOS左券。

在Linux的top和ps命令中,私下认可看见最多的是pid (process
ID),大概你也能收看lwp (thread ID)和tgid (thread group ID for the thread
group leader)等等,而在Linux库函数和系统调用里大概你放在心上到了pthread
id和tid等等。还应该有越多的ID,举个例子pgrp (process group ID), sid (session ID
for the session leader)和 tpgid (tty process group ID for the process
group
leader)。概念太多大概很晕,不过一旦对Linux的历程和线程的基本概念有准确的通晓,这个ID的意思都化解。上边将介绍进度和线程的骨干概念,并以贰个演示程序来评释这么些ID之间的涉及。

基本用法

pidof [选项] [程序名]

其常用选项参数如下所示:

选项 说明
-s 仅返回一个PID
-c 仅返回具有相同root目录的PID
-x 显示由脚本开启的进程
-o omitpid 忽略指定的PID
pidof命令的返回值通常只有两个:
- 0:pidof命令至少找到一个对应的PID
- 1:pidof没有找到任何匹配的PID

结合Samba运转的有八个劳务,二个是SMB,另二个是NMB;SMB是Samba
的大旨运行服务,首要承建构造 Linux Samba服务器与Samba客商机之间的对话,
验证客户身份并提供对文本和打字与印刷系统的访问,只有SMB服务运营,本领促成文件的分享,监听139
TCP端口;而NMB服务是承受剖判用的,类似与DNS完毕的效应,NMB能够把Linux系统分享的工作组名称与其IP对应起来,若是NMB服务未有运行,就只能通过IP来访谈分享文件,监听137和138
UDP端口。

 

用法示例

1、展现运营程序的PID

[root@localhost ~]# pidof sshd
34128 34059 28835 28820 24697 24627 23228 23215 1995

在体现的结果可以看出共有9个PID,则阐明服务器上9个经过均是由sshd运营的。

2、显示Shell的进程

[root@localhost ~]# cat test.sh
#!/bin/bash
i=1;
while [ $i -le 10000 ]
do
 echo $i
 i=$((i+1))
 sleep 120s
done
[root@localhost ~]# ./test.sh &
[root@localhost ~]# pidof -x test.sh
36554

3、突显钦赐程序的PID

[root@localhost ~]# pidof -s sshd
7524

4、忽略钦定的PID

[root@localhost ~]# pidof sshd
9104 9103 7524 7434 4474 4462 1995
[root@localhost ~]# pidof sshd -o 1995
11979 11978 7524 7434 4474 4462

    配置那个事物你供给先拥有root权限。

Linux的长河和线程

Linux的经过和线程有众多异同点,能够谷歌(Google)下。但若是能清楚地知道一下几点,则丰硕精通Linux中各类ID的意义。

  • 经过是能源分配的大旨单位,线程是调节的宗旨单位
  • 进度是能源的聚合,那一个能源蕴涵内部存款和储蓄器地址空间,文件描述符等等,多个进度中的多个线程分享那一个财富。
  • CPU对职务打开调整时,可调治的主导单位
    (dispatchable
    entity)是线程。如果叁个历程中绝非别的线程,能够知晓成这几个进度中唯有贰个主线程,那些主进度独享进度中的全体财富。
  • 进程的私家间是截然独立的,而线程间是互为依存,而且分享能源。多进程情状中,任何二个进程的告一段落,不会耳濡目染到另外非子进度。而多线程意况中,父线程终止,全体子线程被迫结束(未有了财富)。

上述第一点表达是最基础的,也是最器重的。

 

始发精通各个ID。基本上依照注重程度从高到低,在分界线下方的IDs不太首要。

  • pid: 进程ID。
  • lwp:
    线程ID。在客商态的命令(举个例子ps)中常用的呈现格局。
  • tid:
    线程ID,等于lwp。tid在系统提供的接口函数中更常用,比方syscall(SYS_gettid)和syscall(__NR_gettid)。
  • tgid:
    线程组ID,也正是线程组leader的进程ID,等于pid。
  • ——分割线——
  • pgid: 进度组ID,也正是进度组leader的长河ID。
  • pthread id: pthread库提供的ID,生效范围不在系统品级,能够忽略。
  • sid: session ID for the session leader。
  • tpgid: tty process group ID for the process group leader。

 从地点的列表看出,各类ID最终都总结到pid和lwp(tid)上。所以精晓种种ID,最后归咎为精通pid和lwp(tid)的联系和不一样。

 

上面包车型客车图是一张陈说父亲和儿子进度,线程之间关系的图。

图片 1

上海教室很好地描述了客户意见(user view)和水源视角(kernel
view)见到线程的不同:

  • 从顾客意见出发,在pid 42中产生的tid
    44线程,属于tgid(线程组leader的经过ID)
    42。甚至用ps和top的私下认可参数,你都力无法支看出tid 44线程。
  • 从基础视角出发,tid 42和tid
    44是单身的调节单元,可以把她们正是”pid 42″和”pid 44″。

要求提出的是,临时候在Linux中经过和线程的界别也是否格外凶恶的。尽管线程和进程混用,pid和tid混用,依照上下文,依然得以知道地区分对方想要表明的野趣。上海教室中,从基础视角出发见到了pid
44,是从调节单元的角度出发,不过在top或ps命令中,你是相对找不到三个pid为44的经过的,只可以看看叁个lwp(tid)为44的线程。

 

lsof

   
在Windows中除去文件时,会油可是生被占有而临时无法删除的情状,那些大家会一款特别好用的软件Unlocker,那么在Linux中好像的气象怎么样管理了?明日大家来上学lsof命令。
    lsof全称list open
files
。用于查看进度张开的文本、目录和套接字等音信。

率先关闭防火墙:service iptables
stop,当初自身就因为忽略这几个花了迟早的岁月。

清楚pid和lwp(tid)的身体力行程序

上面选取三个演示程序来进一步明白pid和lwp(tid),以及使用格式化的ps命令打字与印刷出种种ID。下边包车型大巴次第在main函数中创制了2个子线程,加上main函数那一个主线程,一共有3个线程。在3个线程中分别打字与印刷pthread
id, pid和lwp(tid),来验证pid和lwp(tid)的涉及。

 1 #include <unistd.h>
 2 #include <sys/syscall.h>
 3 #include <stdio.h>
 4 #include <pthread.h>
 5 
 6 #define gettidv1() syscall(__NR_gettid) // new form
 7 #define gettidv2() syscall(SYS_gettid)  // traditional form
 8 
 9 void *ThreadFunc1()
10 {
11         printf("the pthread_1 id is %ld\n", pthread_self());
12         printf("the thread_1's Pid is %d\n", getpid());
13         printf("The LWPID/tid of thread_1 is: %ld\n", (long int)gettidv1());
14         pause();
15 
16         return 0;
17 }
18 
19 void *ThreadFunc2()
20 {
21         printf("the pthread_2 id is %ld\n", pthread_self());
22         printf("the thread_2's Pid is %d\n", getpid());
23         printf("The LWPID/tid of thread_2 is: %ld\n", (long int)gettidv1());
24         pause();
25 
26         return 0;
27 }
28 
29 int main(int argc, char *argv[])
30 {
31         pid_t tid;
32         pthread_t pthread_id;
33 
34         printf("the master thread's pthread id is %ld\n", pthread_self());
35         printf("the master thread's Pid is %d\n", getpid());
36         printf("The LWPID of master thread is: %ld\n", (long int)gettidv1());
37 
38         // 创建2个线程
39         pthread_create(&pthread_id, NULL, ThreadFunc2, NULL);
40         pthread_create(&pthread_id, NULL, ThreadFunc1, NULL);
41         pause();
42 
43         return 0;
44 }

小心编写翻译的时候要采纳-l钦赐library参数。

# gcc threadTest.c -o threadTest -l pthread

 

执行顺序,结果如下:

# ./threadTest
the master thread's pthread id is 140154481125184
the master thread's Pid is 20992
The LWPID of master thread is: 20992
the pthread_1 id is 140154464352000
the thread_1's Pid is 20992
The LWPID/tid of thread_1 is: 20994
the pthread_2 id is 140154472744704
the thread_2's Pid is 20992
The LWPID/tid of thread_2 is: 20993

上述结果印证pthread
id是pthread库提供的ID,在系统等第没风趣。pid都是线程组leader的历程ID,即20992。而lwp(tid)则是线程ID,分别是20993和20994。

 

况且使用ps来查阅结果,注意ps暗中认可只打字与印刷进度等级音信,需求用-L选项来查阅线程基本音讯。

# ps -eo pid,tid,lwp,tgid,pgrp,sid,tpgid,args -L | awk '{if(NR==1) print $0; if($8~/threadTest/) print $0}'
  PID   TID   LWP  TGID  PGRP   SID TPGID COMMAND
20992 20992 20992 20992 20992 30481 20992 ./threadTest
20992 20993 20993 20992 20992 30481 20992 ./threadTest
20992 20994 20994 20992 20992 30481 20992 ./threadTest

从上述结果中得以见见:

  • PID=TGID: 20992
  • TID=LWP: 20993 or 20994
  • 至于SID,30481是bash shell的进程ID。

 

中心用法

pidof [选项] [文件名]

其常用选项参数如下所示:

选项 说明
-?或-h 显示帮助信息
-a 显示打开文件存在的进程
-c 进程名 显示指定进程所打开的文件
-d FD 显示文件描述符(FD)占用的进程
+d 目录名 显示当前目录下被打开的文件
+D 目录名 递归显示当前目录下被打开的文件
-i 条件 显示符合条件的进程
-p pid 显示指定PID打开的文件
-u uid 显示指定UID打开的文件
-g 显示所属组标识符PGID
R 显示父进程PPID

里面选拔 -i 协理的条件如下所示:

条件 说明 示例
4/6 IPv4/ IPv6 lsof -i
protocol UDP/TCP lsof -i TCP
hostname 网络主机名 lsof -i@localhost
hostaddr 网络地址 lsof -i@192.168.8.8
service 服务名称,可查看/etc/services lsof -i:ssh
port 端口 lsof -i:22

lsof输出的详细音信解释如下:

  • COMMAND:进程名称,假使名称较长,则暗许只体现前9个字符
  • PID:进度标记符,就算加上-路虎极光参数,则显得父进程PPID
  • USE中华V:进度全体者,若是加上-g参数,则显示组标记符PGID
  • FD:文件呈报符
  • TYPE:文件类型,常见类型如下所示:
    DI凯雷德:表示目录
    REG:表示平日文书
    CH中华V:表示字符类型
    BLK:表示块设备项目
    UNIX:表示UNIX套接字
    FIFO:表示先进先出队列
    IPv4:表示IPv4套接字
    IPv6:表示IPv6套接字

文件叙述符FD,但却得以象征两类内容:

  • 先是类是文本呈报符
    0:标准输入
    1:标准输出
    2:标准错误输出
    n:别的文件呈报符的数值

图片 2

  • 其次类描述文件特征的标记
    CWD:表示应用程序的当前职业目录,即程序运转的目录
    txt:表示文件类型为程序代码或数额
    mem:内部存款和储蓄器映射文件
    pd:父目录
    rtd:根目录
    DEL:表示文件已经删除但还存在于内部存款和储蓄器中

 另外关闭SELINUX的强制格局:setenforce 0,那个也不可忽略,假如setenforce
1,就那么些分享都不成事了。

Linux顾客态命令查看线程

用法示例

1、通过文件定位占用的长河

[root@localhost ~]# top -d 2 > top.txt
[root@localhost ~]# lsof top.txt
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
  Output information may be incomplete.
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
top     8900 root    1w   REG    8,2    69035 469790741 top.txt

2、通过文件呈报符定位进程

[root@localhost ~]# lsof -d 5 | head -3
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
   Output information may be incomplete.
COMMAND  PID  USER   FD   TYPE      DEVICE SIZE/OFF NODE       NAME
systemd  1    root   5u   a_inode   0,10     0     7450       [signalfd]
Xvnc     2678 root   5u   IPv6      41776    0t0   TCP *:6003 (LISTEN)

3、通过进程定位文件

[root@localhost ~]# ps -ef |grep -i  mysql | grep -v grep
mysql 2680  1  2 7月19 ?  11:44:50 /usr/libexec/mysqld --basedir=/usr
[root@localhost ~]# lsof -p 2680 | head -3
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
     Output information may be incomplete.
COMMAND  PID  USER   FD    TYPE  DEVICE SIZE/OFF  NODE   NAME
mysqld  2680  mysql  cwd   DIR   8,2    4096      319571 /var/lib/mysql
mysqld  2680  mysql  rtd   DIR   8,2    254       512    /

4、查看客户张开的公文

[root@localhost ~]# lsof -u root | tail -3
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
   Output information may be incomplete.
COMMAND   PID   USER  FD     TYPE DEVICE  SIZE/OFF NODE NAME
kworker/3 39337 root  cwd    DIR  8,2     254      512  /
kworker/3 39337 root  rtd    DIR  8,2     254      512  /
kworker/3 39337 root  txt   unknown                     /proc/39337/exe

5、查看程序所占领的端口

[root@localhost ~]# lsof -i:22
COMMAND PID    USER   FD  TYPE  DEVICE      SIZE/OFF NODE NAME
sshd    27597  root   3u  IPv4 1460505039   0t0      TCP *:ssh (LISTEN)
sshd    27597  root   4u  IPv6 1460505041   0t0      TCP *:ssh (LISTEN)

 安装Samba:

top

暗中同意top显示的是task数量,即经过。

图片 3

能够选用敲”H”,来切换到线程。如下,能够看出实际有98个线程。也得以一向动用top
-H命令来平昔打字与印刷线程情形。

图片 4

 

fuser

    fuser重要用以显示进程正在使用的文书、套接字、挂载点等。

        yum install samba samba-client samba-swat

ps

ps的-L选项可以看来线程,常常能打字与印刷出LWP和NLWP相关音信。如下命令就可以查看线程新闻:

ps -eLf

 

主导用法

fuser [选项] [文件名]

其常用选项如下所示:

选项 说明
-a ,–all 显示命令行中指定的所有文件
-c 同-m选项,用于兼容POSIX
-k, –kill 杀掉使用文件的进程
-i, –interactive 杀掉进程前需要用户确认,如果无-k参数则默认忽略该参数
-l, –list-signals 显示所有已知的 signal名称
-m NAME, –mount NAME 指定一个挂载的文件系统或被挂载的设备
-n SPACE 指定一个不同的命名空间,支持不同的命名空间文件(默认为文件名)、UDP(本地UDP端口)、TCP(本地TCP端口),为避免歧义,可以使用name/space形式,如80/tcp
-w 仅杀掉拥有写入权限的进程,如果无-k参数则默认忽略该参数
-s, –silent 静默模式,-u和-v忽略该参数
-u, –user 在PID后显示所属的用户名
-v, –verbose 显示详细信息
-4, –ipv4 仅搜索IPv4的套接字
-6, –ipv6 仅搜索IPv6的套接字

fuser呈现钦点文件或文件系统的历程PID,在暗中同意情势中,每种文件名背后会用叁个假名代表访谈类型,如下所示:

  • c:表示当前目录
  • e:表示该公文为可试行文件
  • f:表示被展开的公文,暗中认可情势中f不出示
  • F:表示被打开的公文,用于写入操作,暗中认可情势中F不呈现
  • r:根目录
  • m:映射文件或分享lib

-f 和 -F 只有与选项 -v 一起使用的时候才会显示,其他情况则默认不显示

        安装进程这里就不贴图了。

pidstat

pidstat -t [-p pid号] 能够打字与印刷出线程之间的涉及。

 

用法示例

1、杀掉全体占用/home的长河

[root@localhost ~]# fuser -km /home

2、展现本地全数mysql上端口进度

[root@localhost ~]# fuser mysql/tcp
mysql/tcp:            2680

3、展现详细的音讯

[root@localhost ~]# fuser -v top.txt
                     用户     进程号  权限   命令
/root/top.txt:       root     15847 F....  top

4、查看有八个经过正在利用有些目录下文件系统,包涵子目录

[root@localhost ~]# fuser -v -m /home/data
                     用户     进程号 权限   命令
/home/data:          root     kernel mount /home/data

5、通过端口定位进程

[root@localhost ~]# fuser -v -n tcp 22
                     用户     进程号 权限   命令
22/tcp:              root      27597 F.... sshd
                     root      31119 F.... sshd
或
[root@localhost ~]# fuser -v 22/tcp
                     用户     进程号 权限   命令
22/tcp:              root      27597 F.... sshd
                     root      31119 F.... sshd

    查看安装情形:

htop

要在htop中启用线程查看,开启htop,然后按<F2>来踏入htop的装置菜单。选用“设置”栏上面包车型客车“展现选项”,然后展开“树状视图”和“彰显自定义线程名”选项。按<F10>退出设置。
注:MAC的F2按fn+F2。

 

fuser与lsof对比

对比项 fuser lsof
定位方式 通过文件查找进程 通过进程查找文件
所属标准 POSIX
参数类型 文件/网络端口 文件/PID/网络端口
进程输出 PID PID详细信息
是否可发送信息 可以,使用-k 不可以

        rmp -qa|grep samba

参考

Linux进程与线程的不一样

ps

   
在Windows系统中用于查看进程平时是通过职务管理器。而在Linux中,大家用ps(Process
Status)命令来查阅进程。

图片 5

主导用法

ps [选项]

其常用选项如下所示:

选项 说明
-A 显示所有进程,同选项-e
-a 显示所有进程,但排除新会话的首进程和无控制终端的进程
-d 显示所有进程,但排除新会话的首进程
-e 显示所有进程,同选项-A
r 仅显示正在运行的进程
-C cmdlist 显示指定命令的进程信息
-p pidlist 显示指定PID的进程
-t ttylist 显示指定tty的进程
-u userlist 显示指定有效用户ID或名字的进程
-c 显示CLS和PRI列
-f 添加详细列信息,通常与其他选项联合使用
-x 没有关联到终端上的进程也进行显示
-o 仅显示自定义的列
-l 仅显示属于当前登录用户的PID与相关信息列表
–sort spec 对输出信息进行排序 + 升序排序 – 降序排序

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注