Linux命令中Ctrl+z、Ctrl+c的区别和使用

事情的起因是这样的:
今天在阿里云买了个服务器,开始研究python的简单web监听,使用python test.py开启了监听,但最后随手通过了ctrl+z结束,再次启动的时候就提示:

Traceback (most recent call last):
  File "test.py", line 19, in <module>
    main()
  File "test.py", line 11, in main
    sock.bind(('172.17.28.105',8006))
  File "/usr/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use

端口被占用,实际上是线程为结束。

之前在windows上使用sublime text3 + python进行python开发的时候,遇到过后台有很多python进程的情况,于是想手动杀进程,查看了一下PID=1276,:

root@iZ2ze4r3b4xczuujolp68uZ:~# ps -au
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       622  0.0  0.2  15956  2304 ttyS0    Ss+  13:53   0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,960
root       625  0.0  0.1  16180  1908 tty1     Ss+  13:53   0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
root       804  0.0  0.5  22648  5248 pts/1    Ss   13:53   0:00 -bash
root      1276  0.0  0.8  35672  8172 pts/1    T    16:26   0:00 python test.py
root      1285  0.0  0.3  37368  3348 pts/1    R+   16:27   0:00 ps -au

但是并杀不动……

root@iZ2ze4r3b4xczuujolp68uZ:~# kill -1276
-bash: kill: 1276: invalid signal specification

看网上说什么找父进程再杀,但是都不行。

这个时候,这个任务的状态STAT就令我感兴趣了,为什么其他都不是T?
看下了下关于linux进程状态的资料(转) Linux进程状态(ps stat)之R、S、D、T、Z、X

STATLinux进程状态解释
R (TASK_RUNNING)可执行状态任务正在运行或者准备就绪
S (TASK_INTERRUPTIBLE)可中断的睡眠状态处于等待队伍中,等待资源有效时唤醒,如等待键盘输入、socket连接、信号等等,但可以被中断唤醒.
D (TASK_UNINTERRUPTIBLE)不可中断的睡眠状态处于等待队伍中,等待资源有效时唤醒,如等待键盘输入、socket连接、信号等等,但不可以被中断唤醒
T (TASK_STOPPED or TASK_TRACED)暂停状态或跟踪状态进程被外部程序暂停(如收到SIGSTOP信号,进程会进入到TASK_STOPPED状态),当再次允许时继续执行(进程收到SIGCONT信号,进入TASK_RUNNING状态),因此处于这一状态的进程可以被唤醒
Z (TASK_DEAD – EXIT_ZOMBIE)退出状态进程成为僵尸进程,程资源用户空间被释放,但内核中的进程PCB并没有释放,等待父进程回收
X (TASK_DEAD – EXIT_DEAD)退出状态进程即将被销毁

这个T就是被暂停的意思。

实际上通过博客Linux命令中Ctrl+z、Ctrl+c和Ctrl+d的区别和使用可以知道:
Ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样.

快捷键功能说明
Ctrl+c强制中断程序的执行
Ctrl+z任务中断,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态

所以此时进程是被我们暂停到后台了,那么后台进程该怎么继续操作呢?

博文fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令介绍:

指令功能说明
jobs查看当前有多少在后台运行的命令。jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
fg将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。
bg将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。

可以使用fg恢复被ctrl-Z暂停的进程。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值