zoukankan      html  css  js  c++  java
  • [原]对Linux环境下任务调度一点认识

      我一直以来有一个误解,那就是在终端运行某个程序时,按下Ctrl + D时我误以为就是杀死了这个进程,今天才知道原来不是。比如我利用libevent在Linux环境下写了一个网络监听程序,当启动程序之后,就会一直监听本地的6789端口。如果此时按下Ctrl + D,其实这个进程不是结束了,而是暂停并转为后台运行了(Ctrl + C才是终止进程。当再次启动程序的时,就是因为端口被占用而出现“bind error”,请看:

    [xiaoku@localhost workspace]$ ls
    echoServer  main.cpp  tags
    [xiaoku@localhost workspace]$ ./echoServer 
    Listening...
    ^Z
    [1]+  已停止               ./echoServer
    [xiaoku@localhost workspace]$ ./echoServer 
    bind error
    [xiaoku@localhost workspace]

      此时利用jobs可以查看后台状态,并利用fg命令将任务转为前台运行:

    [xiaoku@localhost workspace]$ jobs
    [1]+  已停止               ./echoServer
    [xiaoku@localhost workspace]$ fg 1
    ./echoServer

      利用bg命令可以将后台停止的任务转为后台运行:

    [xiaoku@localhost workspace]$ jobs
    [1]+  已停止               ./echoServer
    [xiaoku@localhost workspace]$ bg
    [1]+ ./echoServer &
    [xiaoku@localhost workspace]$ jobs
    [1]+  运行中               ./echoServer &
    [xiaoku@localhost workspace]$ 

      所以总结起来有以下几点:

    (1)Ctrl + z 停止进程并放入后台运行

    (2) jobs 显示当前后台运行的进程

    (3) bg %N 使第N个任务在后台运行(%前有空格),如果不带%N则表示对最后一个进程操作

    (4) fg %N  使第N个任务在前台运行(%前有空格),如果不带%N则表示对最后一个进程操作

    (5)Ctrl + c 终止进程!

      如果我想停止这个进程怎么办呢?最简单的办法就是先调用fg将任务切换到前台运行,然后按Ctrl + c。不过也可以用暴力手段,下面介绍一下如何查看端口状态和(通过端口号)找到相关进程号,并强行杀死进程:

    [xiaoku@localhost workspace]$ netstat -tln | grep 6789 <使用netstat查看端口状态>
    tcp        0      0 0.0.0.0:6789            0.0.0.0:*               LISTEN     
    [xiaoku@localhost workspace]$ lsof -i:6789        <这里使用lsof查看指定的端口号6789所对应的进程名称、ID等信息>
    COMMAND    PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    echoServe 2796 xiaoku    3u  IPv4 1268175      0t0  TCP *:smc-https (LISTEN)
    [xiaoku@localhost workspace]$ kill -9 2796    <强行杀死进程>
    [1]+  已杀死               ./echoServer
    [xiaoku@localhost workspace]$ ./echoServer &   <直接后台运行进程>
    [1] 2909
    Listening...
    [xiaoku@localhost workspace]$ jobs
    [1]+  运行中               ./echoServer &
    [xiaoku@localhost workspace]$  
  • 相关阅读:
    学习篇之函数就是对象
    @Controller和@RestController的区别
    maven 阿里云 国内镜像 中央仓库
    IntelliJ IDEA使用教程
    解决“无法从套接字读取更多数据”
    at java.util.Arrays.copyOfRange(Arrays.java:3209)导致的java.lang.OutOfMemoryError: Java heap space 错误的解决办法
    maven中引入ojdbc包
    Oralce增加表空间
    Web服务框架发展与REST服务开发
    Oralce解锁表
  • 原文地址:https://www.cnblogs.com/kuliuheng/p/3988536.html
Copyright © 2011-2022 走看看