Open rrain7 opened 3 years ago
进程是当前在系统上运行的编译过的源代码。 每个进程都有一个进程id,也称PID 每一个进程都有一个父进程「PPID」,子进程通常由父进程启动 init进程 PID=1,它是由内核启动,所以它没有父进程,它充当僵尸进程的父进程。 「守护进程」随系统启动而启动,并且永远保持运行
进程id
PID
PPID
$$ 会保留你当前的进程 ID 。 $PPID 将会显示父进程 ID 可以使用pidof命令按名称找到所有进程的ID。
$$
$PPID
pidof
pidof mingetty
fork && exec 一个进程启动另一个进程分为两个阶段。首先,该进程创建一个自己的分叉(fork),即一个相同的副本。然后被分叉的进程执行一个执行(exec)程序,用目标子进程替换被分叉的进程。
fork
exec
> echo $$ 10 > sh # 子进程 > echo $$ $PPID 1572 10 > exec bash > echo $$ $PPID 1572 10
ps Linux上最常用的查看进程的工具之一是ps。下面显示了三个bash进程之间的父子关系。
> echo $$ $PPID 1577 0 > bash > echo $$ $PPID 1603 1577 > bash > echo $$ $PPID 1606 1603 > ps fx PID TTY STAT TIME COMMAND 1577 pts/1 Ss 0:00 /bin/bash 1603 pts/1 S 0:00 \_ bash 1606 pts/1 S 0:00 \_ bash 1609 pts/1 R+ 0:00 \_ ps fx 1 pts/0 Ss+ 0:00 bash
与ps -C类似,你也可以用pgrep按命令名称搜索一个进程。
ps -C
pgrep
> sleep 100& [1] 1616 > pgrep sleep 1616
Linux上另一个流行的工具是top。top工具可以根据cpu使用率或其他属性来排列进程。你也可以从top中杀死进程。在top中按h键获得帮助。
top
cpu
在出现问题时,top通常是第一个启动的工具,因为它也为你提供内存和交换空间信息。
kill命令将会杀死(或者停止)一个进程 通过使用kill,我们向进程发送了一个信号。
kill
> ps fx PID TTY STAT TIME COMMAND 1577 pts/1 Ss 0:00 /bin/bash 1603 pts/1 S 0:00 \_ bash 1606 pts/1 S 0:00 \_ bash 1621 pts/1 R+ 0:00 \_ ps fx 1 pts/0 Ss+ 0:00 bash > kill 1606 >
运行中的进程可以接收来自对方或用户的信号。你可以通过输入kill -l(即字母l,而不是数字1)来获得一个信号列表。
> kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5)SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
在Linux上,通常使用第一个信号SIGHUP(或HUP或1)来告诉一个进程应该重新读取它的配置文件。因此,kill -1 1命令迫使init进程(init总是以pid 1运行)重新读取其配置文件。
SIGHUP
kill -15是标准kill, 若不指定,则默认为kill -15
kill -15
SIGKILL与其他大多数信号不同,它不是发给进程的,而是发给Linux内核的。kill-9也被称为肯定杀死。内核会将进程击落。作为一个开发者,你没有办法拦截kill -9信号。
SIGKILL
kill-9
kill -9
pkill 可以通过进程名称将进程杀死。
pkill
> sleep 100& > pkill sleep
top命令下, 按k可以选择一个pid进行杀死
k
pid
所有进程都有一个优先级和一个漂亮的值。高优先级的进程将比低优先级的进程获得更多的cpu时间。你可以用nice和renice命令来影响这一点。
nice
renice
pipes(mkfifo) 进程可以使用管道来进行通信,管道可以使用mkfifo来进行创建。
mkfifo
> take procs procs> mkfifo pipe33a pipe33b pipe42a pipe42b procs> ls -l total 0 prw-r--r-- 1 root root 0 Aug 24 06:06 pipe33a prw-r--r-- 1 root root 0 Aug 24 06:06 pipe33b prw-r--r-- 1 root root 0 Aug 24 06:06 pipe42a prw-r--r-- 1 root root 0 Aug 24 06:06 pipe42b
top -p 67,68,70显示指定pid运行情况
top -p 67,68,70
> top -p 67,68,70 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 67 root 20 0 4240 604 0 S 0.0 0.0 0:00.00 bash 68 root 20 0 4240 616 0 S 0.0 0.0 0:00.00 bash 70 root 20 0 4240 616 0 S 0.0 0.0 0:00.00 bash
由于进程已经在运行,我们需要使用renice命令来改变其nice值(NI)。
NI
renice +n pid # n = 0 to 20
普通用户可以将n设为[0,20], root用户可以使用负值,使用负的nice值时要非常小心,因为它们可能导致无法使用键盘或ssh到一个系统。
nice值的影响 越不重要的进程的nice值越大,越重要的进程nice值越小。 使用负的nice值会对系统的可用性产生严重影响。
nice的作用与renice相同,但它是在启动命令时使用的。截图显示了如何以5的nice值启动一个脚本。
> nice -5 ./backup.sh
Linux 系统管理
进程管理
进程是当前在系统上运行的编译过的源代码。 每个进程都有一个
进程id
,也称PID
每一个进程都有一个父进程「PPID
」,子进程通常由父进程启动 init进程 PID=1,它是由内核启动,所以它没有父进程,它充当僵尸进程的父进程。 「守护进程」随系统启动而启动,并且永远保持运行$$
会保留你当前的进程 ID 。$PPID
将会显示父进程 ID 可以使用pidof
命令按名称找到所有进程的ID。fork && exec 一个进程启动另一个进程分为两个阶段。首先,该进程创建一个自己的分叉(
fork
),即一个相同的副本。然后被分叉的进程执行一个执行(exec
)程序,用目标子进程替换被分叉的进程。exec
ps Linux上最常用的查看进程的工具之一是ps。下面显示了三个bash进程之间的父子关系。
与
ps -C
类似,你也可以用pgrep
按命令名称搜索一个进程。Linux上另一个流行的工具是
top
。top
工具可以根据cpu
使用率或其他属性来排列进程。你也可以从top
中杀死进程。在top中按h键获得帮助。在出现问题时,
top
通常是第一个启动的工具,因为它也为你提供内存和交换空间信息。kill
命令将会杀死(或者停止)一个进程 通过使用kill
,我们向进程发送了一个信号。运行中的进程可以接收来自对方或用户的信号。你可以通过输入kill -l(即字母l,而不是数字1)来获得一个信号列表。
kill -15
是标准kill, 若不指定,则默认为kill -15
SIGKILL
与其他大多数信号不同,它不是发给进程的,而是发给Linux内核的。kill-9
也被称为肯定杀死。内核会将进程击落。作为一个开发者,你没有办法拦截kill -9
信号。pkill
可以通过进程名称将进程杀死。top
命令下, 按k
可以选择一个pid
进行杀死进程优先级
所有进程都有一个优先级和一个漂亮的值。高优先级的进程将比低优先级的进程获得更多的cpu时间。你可以用
nice
和renice
命令来影响这一点。pipes(mkfifo) 进程可以使用管道来进行通信,管道可以使用
mkfifo
来进行创建。top -p 67,68,70
显示指定pid
运行情况由于进程已经在运行,我们需要使用
renice
命令来改变其nice
值(NI
)。普通用户可以将n设为[0,20], root用户可以使用负值,使用负的nice值时要非常小心,因为它们可能导致无法使用键盘或ssh到一个系统。
nice值的影响 越不重要的进程的nice值越大,越重要的进程nice值越小。 使用负的nice值会对系统的可用性产生严重影响。
nice
的作用与renice
相同,但它是在启动命令时使用的。截图显示了如何以5的nice
值启动一个脚本。