[原]对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
[]+ 已停止 ./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环境下任务调度一点认识的更多相关文章
- Unix/Linux环境下多一点不如少一点
正如很多人所知道的$PATH环境变量里存着一张目录列表,当用户要执行某一程序时,系统就会按照列表中的内容去查找该程序的位置.当程序名前不带点斜线 . / 时$PATH就会起作用. 对于普通用户和roo ...
- 【原】Linux环境下Shell调用MySQL并实现定时任务
对于一些周期性事务,我们可以在Linux下,使用shell脚本调用mysql数据库存储过程,并设置定时任务. 本来是要mysql数据库中创建事件任务来,定时执行存储过程,做数据传输的...使用cron ...
- [原]Fedora Linux环境下的应用工具总结
一.办公类软件 1.Office办公:WPS 二.网络通信类软件 1.浏览器:Chrome 2.远程桌面:rdesktop(适用于Windows系列) 三.操作系统设置与优化 1.3D桌面管理:Com ...
- 【ARM-Linux开发】Linux环境下使用eclipse开发C++动态链接库程序
Linux环境下使用eclipse开发C++动态链接库程序 Linux中也有类似windows中DLL的变成方法,只不过名称不同而已.在Linux中,动态链接叫做Standard Object,生成的 ...
- Linux环境下安装Tigase XMPP Server
Tigase是一种XMPP服务器,可以作为采用XMPP协议的各种IM(Instant Messeging)工具(如Pandion.Spark等)的服务器. 在Linux环境下安装Tigase的步骤如下 ...
- 多线程编程之Linux环境下的多线程(一)
一.Linux环境下的线程 相对于其他操作系统,Linux系统内核只提供了轻量级进程的支持,并未实现线程模型.Linux是一种“多进程单线程”的操作系统,Linux本身只有进程的概念,而其所谓的“线程 ...
- 【转载】linux环境下tcpdump源代码分析
linux环境下tcpdump源代码分析 原文时间 2013-10-11 13:13:02 CSDN博客 原文链接 http://blog.csdn.net/han_dawei/article/d ...
- Linux环境下Python的安装过程
Linux环境下Python的安装过程 前言 一般情况下,Linux都会预装 Python了,但是这个预装的Python版本一般都非常低,很多 Python的新特性都没有,必须重新安装新一点的版本,从 ...
- linux环境下tcpdump源代码分析
Linux 环境下tcpdump 源代码分析 韩大卫@吉林师范大学 tcpdump.c 是tcpdump 工具的main.c, 本文旨对tcpdump的框架有简单了解,只展示linux平台使用的一部分 ...
随机推荐
- CART
一.为什么有CART回归树 以前学过全局回归,顾名思义,就是指全部数据符合某种曲线.比如线性回归,多项式拟合(泰勒)等等.可是这些数学规律多强,硬硬地将全部数据逼近一些特殊的曲线.生活中的数据可是千变 ...
- MySQL 获得当前日期时间(以及时间的转换)
1.1 获得当前日期+时间(date + time)函数:now() 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数: current_timestamp() curr ...
- Core Java Volume I — 3.1. A Simple Java Program
Let’s look more closely at one of the simplest Java programs you can have—one that simply prints a m ...
- 下载abap 源代码
转自http://blog.sina.com.cn/s/blog_4d1570de0100pvhd.html *@------------------------------------------- ...
- phpstudy linux (lnmp,lamp)一键安装
phpStudy for Linux 支持Apache/Nginx/Tengine/Lighttpd, 支持php5.2/5.3/5.4/5.5切换 已经在centos-6.5,debian-7.4. ...
- Educational Codeforces Round 15 B
B. Powers of Two time limit per test 3 seconds memory limit per test 256 megabytes input standard in ...
- C++ Primer : 第十二章 : 文本查询程序
C++ Primer书上这个例子讲的很不错,写写帮助自己理解标准库和智能指针. .h 文件内容 #include <fstream> #include <iostream> # ...
- 【渗透测试学习平台】 web for pentester -3.XSS
Example 1 http://192.168.91.139/xss/example1.php?name=hacker<script>alert('xss')</script> ...
- c 函数及指针学习 5
聚合数据类型 能够同时存储超过一个的单独数据. c语言提供了数组和结构体. 1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> # ...
- Linux文件系统目录标准
FHS(Filesystem Hierarchy Standard):文件层次标准 操作系统自身运行使用的 /bin: 存放可执行的二进制程序,管理员和普通用户都可以使用 /sbin:管理员才能执行的 ...