我一直以来有一个误解,那就是在终端运行某个程序时,按下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
[]+ 已停止 ./echoServer
[xiaoku@localhost workspace]$ ./echoServer
bind error
[xiaoku@localhost workspace]

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

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

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

[xiaoku@localhost workspace]$ jobs
[]+ 已停止 ./echoServer
[xiaoku@localhost workspace]$ bg
[]+ ./echoServer &
[xiaoku@localhost workspace]$ jobs
[]+ 运行中 ./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.0.0:* LISTEN
[xiaoku@localhost workspace]$ lsof -i:6789        <这里使用lsof查看指定的端口号6789所对应的进程名称、ID等信息>
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
echoServe xiaoku 3u IPv4 0t0 TCP *:smc-https (LISTEN)
[xiaoku@localhost workspace]$ kill - 2796    <强行杀死进程>
[]+ 已杀死 ./echoServer
[xiaoku@localhost workspace]$ ./echoServer &   <直接后台运行进程>
[]
Listening...
[xiaoku@localhost workspace]$ jobs
[]+ 运行中 ./echoServer &
[xiaoku@localhost workspace]$  

[原]对Linux环境下任务调度一点认识的更多相关文章

  1. Unix/Linux环境下多一点不如少一点

    正如很多人所知道的$PATH环境变量里存着一张目录列表,当用户要执行某一程序时,系统就会按照列表中的内容去查找该程序的位置.当程序名前不带点斜线 . / 时$PATH就会起作用. 对于普通用户和roo ...

  2. 【原】Linux环境下Shell调用MySQL并实现定时任务

    对于一些周期性事务,我们可以在Linux下,使用shell脚本调用mysql数据库存储过程,并设置定时任务. 本来是要mysql数据库中创建事件任务来,定时执行存储过程,做数据传输的...使用cron ...

  3. [原]Fedora Linux环境下的应用工具总结

    一.办公类软件 1.Office办公:WPS 二.网络通信类软件 1.浏览器:Chrome 2.远程桌面:rdesktop(适用于Windows系列) 三.操作系统设置与优化 1.3D桌面管理:Com ...

  4. 【ARM-Linux开发】Linux环境下使用eclipse开发C++动态链接库程序

    Linux环境下使用eclipse开发C++动态链接库程序 Linux中也有类似windows中DLL的变成方法,只不过名称不同而已.在Linux中,动态链接叫做Standard Object,生成的 ...

  5. Linux环境下安装Tigase XMPP Server

    Tigase是一种XMPP服务器,可以作为采用XMPP协议的各种IM(Instant Messeging)工具(如Pandion.Spark等)的服务器. 在Linux环境下安装Tigase的步骤如下 ...

  6. 多线程编程之Linux环境下的多线程(一)

    一.Linux环境下的线程 相对于其他操作系统,Linux系统内核只提供了轻量级进程的支持,并未实现线程模型.Linux是一种“多进程单线程”的操作系统,Linux本身只有进程的概念,而其所谓的“线程 ...

  7. 【转载】linux环境下tcpdump源代码分析

    linux环境下tcpdump源代码分析 原文时间 2013-10-11 13:13:02  CSDN博客 原文链接  http://blog.csdn.net/han_dawei/article/d ...

  8. Linux环境下Python的安装过程

    Linux环境下Python的安装过程 前言 一般情况下,Linux都会预装 Python了,但是这个预装的Python版本一般都非常低,很多 Python的新特性都没有,必须重新安装新一点的版本,从 ...

  9. linux环境下tcpdump源代码分析

    Linux 环境下tcpdump 源代码分析 韩大卫@吉林师范大学 tcpdump.c 是tcpdump 工具的main.c, 本文旨对tcpdump的框架有简单了解,只展示linux平台使用的一部分 ...

随机推荐

  1. C++学习笔记5:如何给变量及函数命名?

    1.遵循C++规定的变量及函数命名方法: 2.原则:简单,易于理解: 以下是一些例子,可以作为参考: //bad examples: int ccount;//Nobody knows what a ...

  2. 大数据hadoop入门学习之集群环境搭建集合

    目录: 1.基本工作准备 1.虚拟机准备 2.java 虚拟机-jdk环境配置 3.ssh无密码登录 2.hadoop的安装与配置 3.hbase安装与配置(集成安装zookeeper) 4.zook ...

  3. ASP连接access 数据库的增删改查 - imsoft.cnblogs

    假设数据库文件名叫data.mdb里面有2个表:1.admin2.news假设admin是保存用户名和密码,里面有字段:UserName,PassWord.假设我们要在判断一个用户名叫name,密码是 ...

  4. Python 结巴分词

    今天的任务是对txt文本进行分词,有幸了解到"结巴"中文分词,其愿景是做最好的Python中文分词组件.有兴趣的朋友请点这里. jieba支持三种分词模式: *精确模式,试图将句子 ...

  5. c 深度剖析 1

    1.register register 变量必须是能被CPU寄存器所接受的类型(32 位机器 寄存器为32位),必须是单个的值,长度小于或等于整形的长度 不能用&来获取register 变量的 ...

  6. JavaWeb学习记录(二十三)——文件上传与下载

    一.导入jar包

  7. timus 1136 Parliament(二叉树)

    Parliament Time limit: 1.0 secondMemory limit: 64 MB A new parliament is elected in the state of MMM ...

  8. P235 实战练习(集合类2)、摇奖程序和验证码(修改版)

    1.分别向Set集合以及List集合中添加“A”.“a”.“c”.“C”.“a”5个元素,观察重复值“a”能否在List集合以及Set集合中成功添加. package org.hanqi.practi ...

  9. kuangbin_ShortPath S (POJ 3169)

    被cow类题目弄得有些炸裂 想了好久好久写了120多行 依然长跪不起发现计算约束条件的时候还是好多麻烦的地方过不去 然后看了看kuangbin的blog 都是泪啊 差分约束的方式做起来只要70多行啊炒 ...

  10. Linux系统编程@多线程编程(二)

    线程的操作 线程标识 线程的ID表示数据类型:pthread_t (内核中的实现是unsigned long/unsigned int/指向pthread结构的指针(不可移植)几种类型) 1.对两个线 ...