Linux之进程管理

时间:2021-03-23 16:44:43

=====================================================================================================

strace调试进程





  查看进程在做那些底层调用

  

[root@limt01 ~]# ps -ef|grep less

root     10932 10822  0 19:28 pts/2    00:00:00 less install.log

root     10935 10782  0 19:28 pts/1    00:00:00 grep less

[root@limt01 ~]# strace -p 10932

Process 10932 attached - interrupt to quit

read(3, 





上面表示进程在做read函数调用





   某个进程启动失败





查看ls命令依赖的库

[root@limt01 ~]# ldd /bin/ls

        linux-vdso.so.1 =>  (0x00007fff4e7ff000)

        libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003a49200000)

        librt.so.1 => /lib64/librt.so.1 (0x0000003a48e00000)

        libcap.so.2 => /lib64/libcap.so.2 (0x0000003a4b200000)

        libacl.so.1 => /lib64/libacl.so.1 (0x0000003a56e00000)

        libc.so.6 => /lib64/libc.so.6 (0x0000003a47e00000)

        libdl.so.2 => /lib64/libdl.so.2 (0x0000003a48200000)

        /lib64/ld-linux-x86-64.so.2 (0x0000003a47600000)

        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003a48600000)

        libattr.so.1 => /lib64/libattr.so.1 (0x0000003a55a00000)

[root@limt01 ~]# mv /lib64/libattr.so.1 /lib64/libattr.so.1.bak

[root@limt01 ~]# ls

ls: error while loading shared libraries: libattr.so.1: cannot open shared object file: No such file or directory

[root@limt01 ~]# strace ls

execve("/bin/ls", ["ls"], [/* 35 vars */]) = 0

brk(0)                                  = 0x19c9000

mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa4e641a000

access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)

open("/etc/ld.so.cache", O_RDONLY)      = 3

fstat(3, {st_mode=S_IFREG|0644, st_size=166426, ...}) = 0

.....

.....

.....                          

stat("/lib64", {st_mode=S_IFDIR|0555, st_size=12288, ...}) = 0

open("/usr/lib64/tls/x86_64/libattr.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

stat("/usr/lib64/tls/x86_64", 0x7fff5fa94ff0) = -1 ENOENT (No such file or directory)

open("/usr/lib64/tls/libattr.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

stat("/usr/lib64/tls", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0

open("/usr/lib64/x86_64/libattr.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

stat("/usr/lib64/x86_64", 0x7fff5fa94ff0) = -1 ENOENT (No such file or directory)

open("/usr/lib64/libattr.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

stat("/usr/lib64", {st_mode=S_IFDIR|0555, st_size=139264, ...}) = 0

writev(2, [{"ls", 2}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libattr.so.1", 12}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"No such file or directory", 25}, {"\n", 1}], 10ls: error while loading shared libraries:
libattr.so.1: cannot open shared object file: No such file or directory

) = 114

exit_group(127)                         = ?





显示无法找到库文件/usr/lib64/libattr.so.1

=====================================================================================================

ldd 查看程序依赖那些库





[root@limt01 lib]# ldd /bin/ls

        linux-vdso.so.1 =>  (0x00007fffe358b000)

        libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003a49200000)

        librt.so.1 => /lib64/librt.so.1 (0x0000003a48e00000)

        libcap.so.2 => /lib64/libcap.so.2 (0x0000003a4b200000)

        libacl.so.1 => /lib64/libacl.so.1 (0x0000003a56e00000)

        libc.so.6 => /lib64/libc.so.6 (0x0000003a47e00000)

        libdl.so.2 => /lib64/libdl.so.2 (0x0000003a48200000)

        /lib64/ld-linux-x86-64.so.2 (0x0000003a47600000)

        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003a48600000)

        libattr.so.1 => /lib64/libattr.so.1 (0x0000003a55a00000)





=====================================================================================================

查看进程树





[root@limt01 lib]# pstree 1

init─┬─NetworkManager─┬─dhclient

     │                └─{NetworkManager}

     ├─abrtd

     ├─acpid

     ├─atd

     ├─auditd─┬─audispd─┬─sedispatch

     │        │         └─{audispd}

     │        └─{auditd}

     ├─automount───4*[{automount}]

     ├─bonobo-activati───{bonobo-activat}

     ├─certmonger

     ├─console-kit-dae───63*[{console-kit-da}]

     ├─crond

     ├─cupsd

     ├─2*[dbus-daemon───{dbus-daemon}]

     ├─dbus-launch

     ├─devkit-power-da

     ├─fcoemon

     ├─gconfd-2





=====================================================================================================

top 监控进程





[root@limt01 lib]# top





top - 09:29:16 up 11 min,  1 user,  load average: 0.00, 0.03, 0.04

Tasks: 193 total,   1 running, 192 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.4%us,  0.8%sy,  0.0%ni, 97.5%id,  1.2%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:   2054116k total,   358856k used,  1695260k free,    40200k buffers

Swap:  4128760k total,        0k used,  4128760k free,   122544k cached





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

    1 root      20   0 19364 1504 1188 S  0.0  0.1   0:02.08 init                                                                   

    2 root      20   0     0    0    0 S  0.0  0.0   0:00.02 kthreadd                                                               

    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.12 migration/0                                                            

    4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                                                            

    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                                                            

    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                                                             

    7 root      RT   0     0    0    0 S  0.0  0.0   0:00.06 migration/1         





=====================================================================================================

查看进程函数调用栈





[root@limt01 lib]# ps -ef|grep less

root      2960  2932  0 09:30 pts/1    00:00:00 less install.log

root      2965  2835  0 09:31 pts/0    00:00:00 grep less

[root@limt01 lib]# pstack 2960

#0  0x0000003a47edb730 in __read_nocancel () from /lib64/libc.so.6

#1  0x0000000000411b26 in ?? ()

#2  0x0000000000415785 in ?? ()

#3  0x0000000000408815 in ?? ()

#4  0x000000000040203e in ?? ()

#5  0x0000003a47e1ed1d in __libc_start_main () from /lib64/libc.so.6

#6  0x0000000000401a49 in ?? ()

#7  0x00007fff4d9b7658 in ?? ()

#8  0x000000000000001c in ?? ()

#9  0x0000000000000002 in ?? ()

#10 0x00007fff4d9b9753 in ?? ()

#11 0x00007fff4d9b9758 in ?? ()

#12 0x0000000000000000 in ?? ()





=====================================================================================================

nm 命令显示关于指定 File 中符号的信息,文件可以是对象文件、可执行文件或对象文件库。





[root@limt01 lib64]# nm -C /lib64/libdl-2.12.so 

0000000000000000 A GLIBC_2.2.5

0000000000000000 A GLIBC_2.3.3

0000000000000000 A GLIBC_2.3.4

0000000000000000 A GLIBC_PRIVATE

0000003a48402da0 a _DYNAMIC

0000003a48402fe8 a _GLOBAL_OFFSET_TABLE_

                 w _Jv_RegisterClasses

0000003a48402d70 d __CTOR_END__

0000003a48402d68 d __CTOR_LIST__

0000003a48402d88 d __DTOR_END__

0000003a48402d78 d __DTOR_LIST__

0000003a48201e40 r __FRAME_END__

0000003a484030a0 b __GI__dlfcn_hook

0000003a48402d90 d __JCR_END__

0000003a48402d90 d __JCR_LIST__





=====================================================================================================

ps 显示进程相关信息





[root@limt01 lib64]# ps -efl|less

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD

4 S root         1     0  0  80   0 -  4841 poll_s 09:17 ?        00:00:02 /sbin/init

1 S root         2     0  0  80   0 -     0 kthrea 09:17 ?        00:00:00 [kthreadd]

1 S root         3     2  0 -40   - -     0 migrat 09:17 ?        00:00:00 [migration/0]

1 S root         4     2  0  80   0 -     0 ksofti 09:17 ?        00:00:00 [ksoftirqd/0]

1 S root         5     2  0 -40   - -     0 cpu_st 09:17 ?        00:00:00 [migration/0]

5 S root         6     2  0 -40   - -     0 watchd 09:17 ?        00:00:00 [watchdog/0]

1 S root         7     2  0 -40   - -     0 migrat 09:17 ?        00:00:00 [migration/1]

1 S root         8     2  0 -40   - -     0 cpu_st 09:17 ?        00:00:00 [migration/1]

1 S root         9     2  0  80   0 -     0 ksofti 09:17 ?        00:00:00 [ksoftirqd/1]

5 S root        10     2  0 -40   - -     0 watchd 09:17 ?        00:00:00 [watchdog/1]

1 S root        11     2  0 -40   - -     0 migrat 09:17 ?        00:00:00 [migration/2]

1 S root        12     2  0 -40   - -     0 cpu_st 09:17 ?        00:00:00 [migration/2]

1 S root        13     2  0  80   0 -     0 ksofti 09:17 ?        00:00:00 [ksoftirqd/2]

5 S root        14     2  0 -40   - -     0 watchd 09:17 ?        00:00:00 [watchdog/2]

1 S root        15     2  0 -40   - -     0 migrat 09:17 ?        00:00:00 [migration/3]

1 S root        16     2  0 -40   - -     0 cpu_st 09:17 ?        00:00:00 [migration/3]

1 S root        17     2  0  80   0 -     0 ksofti 09:17 ?        00:00:00 [ksoftirqd/3]

5 S root        18     2  0 -40   - -     0 watchd 09:17 ?        00:00:00 [watchdog/3]

1 S root        19     2  0  80   0 -     0 worker 09:17 ?        00:00:00 [events/0]

1 S root        20     2  0  80   0 -     0 worker 09:17 ?        00:00:00 [events/1]

1 S root        21     2  0  80   0 -     0 worker 09:17 ?        00:00:00 [events/2]

1 S root        22     2  0  80   0 -     0 worker 09:17 ?        00:00:00 [events/3]

1 S root        23     2  0  80   0 -     0 worker 09:17 ?        00:00:00 [cgroup]









[root@limt01 lib64]# ps aux|less

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root         1  0.1  0.0  19364  1504 ?        Ss   09:17   0:02 /sbin/init

root         2  0.0  0.0      0     0 ?        S    09:17   0:00 [kthreadd]

root         3  0.0  0.0      0     0 ?        S    09:17   0:00 [migration/0]

root         4  0.0  0.0      0     0 ?        S    09:17   0:00 [ksoftirqd/0]

root         5  0.0  0.0      0     0 ?        S    09:17   0:00 [migration/0]

root         6  0.0  0.0      0     0 ?        S    09:17   0:00 [watchdog/0]

root         7  0.0  0.0      0     0 ?        S    09:17   0:00 [migration/1]

root         8  0.0  0.0      0     0 ?        S    09:17   0:00 [migration/1]

root         9  0.0  0.0      0     0 ?        S    09:17   0:00 [ksoftirqd/1]

root        10  0.0  0.0      0     0 ?        S    09:17   0:00 [watchdog/1]

root        11  0.0  0.0      0     0 ?        S    09:17   0:00 [migration/2]

root        12  0.0  0.0      0     0 ?        S    09:17   0:00 [migration/2]

root        13  0.0  0.0      0     0 ?        S    09:17   0:00 [ksoftirqd/2]

root        14  0.0  0.0      0     0 ?        S    09:17   0:00 [watchdog/2]

root        15  0.0  0.0      0     0 ?        S    09:17   0:00 [migration/3]

root        16  0.0  0.0      0     0 ?        S    09:17   0:00 [migration/3]

root        17  0.0  0.0      0     0 ?        S    09:17   0:00 [ksoftirqd/3]

root        18  0.0  0.0      0     0 ?        S    09:17   0:00 [watchdog/3]

root        19  0.0  0.0      0     0 ?        S    09:17   0:00 [events/0]

root        20  0.0  0.0      0     0 ?        S    09:17   0:00 [events/1]

root        21  0.0  0.0      0     0 ?        S    09:17   0:00 [events/2]

root        22  0.0  0.0      0     0 ?        S    09:17   0:00 [events/3]

root        23  0.0  0.0      0     0 ?        S    09:17   0:00 [cgroup]

root        24  0.0  0.0      0     0 ?        S    09:17   0:00 [khelper]









=====================================================================================================

proc 显示进程相关信息





[root@limt01 lib64]# ps -ef|grep less

root      3062  2932  0 09:42 pts/1    00:00:00 less install.log

root      3065  2835  0 09:42 pts/0    00:00:00 grep less

[root@limt01 lib64]# cd /proc/3062

[root@limt01 3062]# ls

attr       clear_refs       cpuset   fd      loginuid   mounts      numa_maps      pagemap      schedstat  stat     task

autogroup  cmdline          cwd      fdinfo  maps       mountstats  oom_adj        personality  sessionid  statm    wchan

auxv       comm             environ  io      mem        net         oom_score      root         smaps      status

cgroup     coredump_filter  exe      limits  mountinfo  ns          oom_score_adj  sched        stack      syscall

[root@limt01 3062]# more cmdline 

less









=====================================================================================================

显示文件被那个进程占用





[root@limt01 ~]# fuser -v /root

                     用户     进程号 权限   命令

/root:               root       2835 ..c.. bash

                     root       2932 ..c.. bash

[root@limt01 ~]# fuser -v /root/install.log

                     用户     进程号 权限   命令

/root/install.log:   root       3216 f.... less





[root@limt01 ~]# lsof /root/install.log

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME

less    3216 root    4r   REG  253,0    89373 1441794 /root/install.log





[root@limt01 ~]# lsof|grep delete

less      3216      root    4r      REG              253,0     89373    1441794 /root/install.log (deleted)

上面表示此文件已经被别的进程删除





kill掉打开此文件的进程

[root@limt01 ~]# fuser -k -v /root/install.log1 

                     用户     进程号 权限   命令

/root/install.log1:  root       3268 f.... less









显示端口被那个进程占用

[root@limt01 ~]# fuser -v -n tcp 22

                     用户     进程号 权限   命令

22/tcp:              root       2488 F.... sshd

                     root       2831 f.... sshd

[root@limt01 ~]# netstat -tnp|grep 22

tcp        0     52 192.168.1.104:22            192.168.1.101:51775         ESTABLISHED 2831/sshd