• 409-Linux基础(进程管理who、ps、fg、bg、jobs、kill)


    1、who命令

    who功能是显示目前登入系统的用户信息,有多少的终端被使用。

    • 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。
    • pts伪终端, 图形用户终端,远程登录终端
    • ctrl+alt+ [F1~ F7]打开不同的终端,F1~F6为字符终端,F7为图形终端。

    who的主要参数如下:

    ‐H #显示每列的标题。
    ‐q #显示登录用户名和登录用户数量。
    
    • 1
    • 2

    在这里插入图片描述

    where@ubuntu:~$ who
    huang tty1 2016‐11‐19 21:19
    where tty7 2016‐11‐19 21:03 (:0)
    where@ubuntu:~$ who ‐H
    名称 线路 时间 备注
    huang tty1 2016‐11‐19 21:19
    where tty7 2016‐11‐19 21:03 (:0)
    where@ubuntu:~$ who ‐q
    huang where
    # 用户数=2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2、ps命令

    ps是英文process status的缩写,用来查看进程的状态, 默认情况下,只显示当前终端的进程的PID、TTY、TIME、CMD。pstree树形结构显示进程。

    ‐a #显示终端上的所有进程,包括其他用户的进程。
    ‐x #显示没有控制终端的进程,并且多了stat字段
    ‐e #显示所有进程。
    ‐f #全格式,多了UID、ppid、STIME字段。
    ‐u #把当前用户的进程全部显示出来,多了%CPU、%MEM、VSZ、RSS、STAT字段
    
    • 1
    • 2
    • 3
    • 4
    • 5

    例如最常用的参数组合ps ‐aux 或者ps ‐ef

    where@ubuntu:~$ ps ‐aux
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.3 4576 3440 ? Ss 05:34 0:05 /sbin/init
    root 2 0.0 0.0 0 0 ? S 05:34 0:00 [kthreadd]
    root 3 0.2 0.0 0 0 ? S 05:34 2:31 [ksoftirqd/0]
    root 5 0.0 0.0 0 0 ? S< 05:34 0:00 [kworker/0:0H]
    root 7 0.0 0.0 0 0 ? S 05:34 0:10 [rcu_sched]
    root 8 0.0 0.0 0 0 ? S 05:34 0:00 [rcu_bh]
    root 9 0.0 0.0 0 0 ? S 05:34 0:00 [migration/0]
    root 10 0.0 0.0 0 0 ? S 05:34 0:01 [watchdog/0]
    root 11 0.0 0.0 0 0 ? S< 05:34 0:00 [khelper]
    root 12 0.0 0.0 0 0 ? S 05:34 0:00 [kdevtmpfs]
    root 13 0.0 0.0 0 0 ? S< 05:34 0:00 [netns]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    USER #用户名
    UID #用户ID(User ID)
    PID #进程ID(Process ID)
    PPID #父进程的进程ID(Parent Process id)
    SID #会话ID(Session id)
    %CPU #进程的cpu占用率
    %MEM #进程的内存占用率
    VSZ #进程所使用的虚存的大小(Virtual Size)
    RSS #进程使用实际内存的大小.
    TTY #与进程关联的终端(tty)
    STAT #进程的状态:进程状态使用字符表示的(STAT的状态码)
    	R #运行Runnable (on run queue) 正在运行或在运行队列中等待。
    	S #睡眠Sleeping 休眠中,可以被中断。
    	Z #僵死Zombie(a defunct process) 进程已终止, 但进程描述符存在.
    	D #不可中断Uninterruptible sleep (ususally IO) cpu不能切到其他进程运行,必须要等到这个状态结
    	束。
    	T #task_stopped or task_traced 暂停状态或跟踪状态
    	X #死掉的进程
    	< #高优先级
    	N #低优先级
    	L #有些页被锁进内存
    	s #包含子进程
    	+ #位于后台的进程组;
    	l #多线程
    	
    START #进程启动的时间。
    TIME #进程消耗的cpu时间。
    COMMAND #正在执行的命令行命令
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    3、jobs、fg、bg命令

    jobs命令用于显示Linux中当前终端的任务列表及任务状态包括后台运行的任务。 该命令可以显示任务号及其对应的进程号。

    fg是英文Foreground缩写, 把指定的后台作业或挂起作业移到前台运行

    bg是英文background缩写, 把被挂起的进程提到后台执行。
    在这里插入图片描述

    ‐l #显示进程号,作业号等;
    ‐p #显示进程号;
    ‐r #仅输出运行状态(running)的任务;
    ‐s #仅输出停止状态(stoped)的任务。
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    ctrl+z 发送一个SIGSTOP 的信号,使进程暂停

    在这里插入图片描述
    在这里插入图片描述

    stoped表示挂起状态 ,Running表示运行状态。


    fg %1	#将1号作业移到前台来运行
    
    • 1

    在这里插入图片描述


    举例:

    我们使用vi时,不小心ctrl+z将进程暂停了,没有保存:

    在这里插入图片描述
    我们使用fg命令将其提到前台来运行。

    fd %3
    
    • 1

    在这里插入图片描述


    写一个程序:

    #include <stdio.h>
    int main(void)
    {
    	int i = 0;
    	while(i++ < 10)
    {
    	sleep(1);
    	puts("helloworld");
    }
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    运行程序,ctrl+z将进程暂停!

    后台运行: 运行结果前台显示,自己还是可以在终端输入命令的!

    bg %3	#让程序在后台运行
    
    • 1

    在这里插入图片描述

    前台运行:前台进程将前台的标准输入占用了,我们就无法再输入了!
    在这里插入图片描述

    4、kill命令

    kill向指定进程发送信号。

    kill ‐l 查看所有信号, 可以指定使用启动的某个信号发送给进程例如: kill ‐9 19204

    where@ubuntu:~$ 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    2)SIGINT
    	程序终止(interrupt)信号, 在用户键入Ctrl+C时发出,用于通知前台进程组终止进程。
    3) SIGQUIT
    	和SIGINT类似, 但由QUIT字符(通常是Ctrl\)来控制. 进程在因收到SIGQUIT退出时会产生core文件(核心转储,并且造成进程退出), 在这个意义上类
    似于一个程序错误信号。
    9) SIGKILL
    	用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个
    信号。
    11) SIGSEGV
    	试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据段错误。
    19) SIGSTOP
    	停止(stopped)进程的执行。注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行。本信号不能被
    阻塞处理或忽略。(Ctrl+z)
    	也可以用来给当前终端的任务发送信号,例如: kill ‐9 %1 给当前终端任务号1的任务发送9号信号。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    杀掉一个作业号:

    kill %2
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    【ASM】字节码操作 MethodWriter
    Flume配置2——监控之Ganglia
    Java IP归属地查询(离线方式+在线方式,内附查询IP方法)
    IPV6 ND协议--源码解析【根源分析】
    医院PACS系统源码 PACS系统源码
    编译原理5 自底向上语法分析
    C专家编程 第8章 为什么程序员无法分清万圣节和圣诞节 8.9 如何进行强制类型转换,为何要进行类型强制转换
    kotlin:LogKit
    C++中类的友元函数和友元类详解
    查看HTTP协议的通讯过程
  • 原文地址:https://blog.csdn.net/Edward_LF/article/details/125415134