Linux之进程管理

=====================================================================================================
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      

你可能感兴趣的:(linux)