1. 任务放入后台执行

  • ctrl+z 挂起进程并放入后台
  • jobs 显示当前暂停的进程
  • bg %N 使第N个任务在后台运行(%前有空格)
  • fg %N 使第N个任务在前台运行
      
    默认bg,fg不带%N时表示对最后一个进程操作!

参考: 在LINUX中 用Ctrl+z挂起的命令怎么切回到原任务的命令窗口

2. ctrl+z、ctrl+c和ctrl+d,exit

2.1 基本认识

  • Ctrl+Z通过向进程发送SIGSTOP信号来暂停进程,这个信号不能被程序打断
  • Ctrl+C通过向进程SIGINT信号杀死进程,是可以被程序打断的,所以可以在exiting之前完成本程序的一些清理工作,或者就不退出了。
    • 比如,对jupyter lab执行ctrl+c的时候,还会提示很多关闭kernel的信息,就是在自我清理。
      在这里插入图片描述
  • 如果暂停一个进程,那么会显示以下信息,提示你,该程序已经被暂停了
    [1]+  Stopped                 yes
    
  • 但是如果kill一个进程,那么除了回到shell的提示之外,不会看到其他别的信息。
  • 暂停一个进程的话,还可以做一些别的事情,比如:
    fg
    
    这个命令会把被暂停的第一个进程再放到前台
  • 如果运行以下命令,则程序暂停后会被放入后台运行,同时程序的输出会被放在TTY中,(关于TTY,我也不太了解,看了一些博客也没看懂:终端、Shell、tty 和控制台(console)有什么区别?
    bg
    
  • 如果想要杀死一个暂停的程序,不需要先把它调到前台,只需要:
    kill %1  # PID号
    

2.2 Unix的Signal

  • Ctrl-C(在较旧的 Unix 中,DEL)发送一个 INT 信号(“中断”,SIGINT); 默认情况下,这会导致进程终止。
  • Ctrl-Z 发送 TSTP 信号(“终端停止”,SIGTSTP); 默认情况下,这会导致进程暂停执行。 [3]
  • Ctrl-\ 发送退出信号(SIGQUIT); 默认情况下,这会导致进程终止并转储核心。
  • Ctrl-T(并非所有 UNIX 都支持)发送 INFO 信号 (SIGINFO); 默认情况下,如果命令支持,这会导致操作系统显示有关正在运行的命令的信息

参考:

2.3 ctrl+D和exit

  • Ctrl+D字符(在Unicode编码里,被作为END OF TRANSMISSION。也可以表示为\040x4)是是内核中终端或伪终端驱动程序的 eof 特殊控制字符参数的默认值(更准确地说是附加的 tty 行规则到串行或伪 tty 设备),作用相当于在终端中输入exit后回车。
  • End-of-Transmission character 传输结束字符,(C语言,从命令行接收参数时,默认最后其实应该有一个eof字符,但是后来回车就默认会添加这个eof字符)

参考:

3. 其他

还有一些其他的控制字符组合:

  • ctrl-s 中断控制台输出
  • ctrl-q 恢复控制台输出
  • ctrl-l 清屏

控制字符都是可以通过stty命令更改的,可在终端中输入命令"stty -a"查看终端配置

(base) ~ > stty -a
speed 38400 baud; rows 21; columns 166; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

注意,这个是bash中的操作,和python等的其他的CLI区分开,例如:python中断程序执行(不抛出异常)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐