2018-6-10Linux进程做业控制与bash循环

1、Linux进程管理及网络工具的使用

1.1 Linux系统做业控制

  咱们继续接着上一次的话题,继续讲解做业控制,所谓的做业控制就是job,由多个功能来完成才能一个做业,因此能够理解为组合的小程序完成复杂任务的概念,对于全部的Linux操做系统来说,做业分为两类,一种是前台做业,一种为后台做业,一个做业可能包含多个进程,也有可能只包含一个。ios

job:
    前台做业(foregroud):经过终端启动,且启动后会一直占据终端;例如:复制;
    后台做业(backgroud):(也)能够经过终端启动,但启动后会转入到后台运行(释放终端);


  须要注意的是,大多数的状况下,咱们在前台启动的做业,若是该命令不支持运行在后台时,它将运行在前台,而服务类的进程能够运行于后台,由于它自己支持运行于后台的服务模式,即便有些服务类进程不是默认运行于后台,咱们也能够手动配置使其运行于后台。小程序

  那么如何让该做业运行于后台,共有两种方式,第一种方式,若是该做业在前台正在运行,咱们可使用Ctrl+z使其送日后台,不过该做业就会转为中止态,而第二种方式就是若是该做业未被运行,咱们使用输入该命令后添加&使其命令启动时就当即送日后台,可是须要注意的是,即便送日后台,也是与进程相关。bash

如何让做业运行于后台:
    (1) 运行中的做业:
        Ctrl + z
        注意:送日后台后,做业会转为中止态;
        
    (2) 还没有启动的做业:
        # COMMAND &
        
        注意:此类做业虽然被送日后台,但其依然运行与终端有关的进程;此时若是仲算进程终止,与终端相关的进程都会终止;若是但愿把送日后台的做业剥离与终端的关系,则使用如下命令:
            # nohup COMMAND &

  若是你想查看全部被用户送日后台的程序,可以使用jobs命令。服务器

查看全部的做业:
    # jobs

  被用户送日后台的进程,咱们能够手动去进行调度,咱们可实现调度做业时有三个命令。而在查看全部做业中咱们发现了+-号,若是没有输入做业号时,那么+就是下一次被默认调换的,而-就是+以后就会轮到该进程。对于kill命令而言,%不能省,由于若是省略,就会杀死的是的进程的PID,而不是做业的ID。
网络

可实现做业控制的经常使用命令:
    # fg [[%]JOB_NUM]:以指定的做业调回前台;
    # bg [[%]JOB_NUM]:让送日后台的做业在后台继续运行;
    # kill %JOB_NUM:终止指定的做业;

1.2 调整进行优先级

  其实做为用户来说,进程的优先级是没有办法调整的,由于优先级的调整共有两类,一种为静态,另外一种为动态,静态由用户调整,动态由内核自动调整,咱们操做的时是调整其nice值,用户所管理的优先级范围是非实时的,100-139tcp

调整进程优先级:
    
    可经过nice值调整的优先级范围:100-139
        分别对应于:-20, 19
        
    进程启动时,其nice值默认为0,其优先级为120;

  那么若是不想让它在启动时为0,获取其更多的资源,咱们可使用如下命令来进行调整。ide

nice命令:
    以指定的nice值启动并运行命令;
        # nice [OPTIO] [COMMAND[ARG]...]

  该命令的选项为:工具

    选项:
        -n NICE
        
    注意:仅管理员可调低nice值;

  还有一种命令叫renice命令,该命令是对已经启动的进程且运行中的进行调整nice值。性能

renice命令:
    # renice [-n] NICE PID...

  若是想查看Nice值和优先级的话,可经过如下方式进行查看。测试

查看Nice值和优先级:
    ps axo pid, ni, priority, comm

  咱们还有未涉及到的命令,先来总结一下:

未涉及到的命令:sar, tsar, iostat, iftop, nethog, ...

1.3 网络客户端工具

  在这里咱们所涉及到的网络命令有:

ping/lftp/ftp/lftpget/wget等;

  咱们先说第一个命令为ping命令,它的主要做用为可以实现网络上的主机来发送ICMP回应请求及响应请求的相关报文,有一个协议为ICMP协议,称之为互联网消息控制协议,它可以实如今网络上发送控制命令,对于咱们来说主要用来探测互联网中的某个主机或网络是否在线或可达。好比像echo request用8来表示,而echo reply用0来进行表示,而ping命令就是向对方发起request报文,正常的话对方就会响应reply报文,不过,因为谁应答就响应的模式,会容易遭受×××,若是想要隐藏的话,则能够关闭该响应reply报文。

ping命令:
    send ICMP ECHO_REQUEST to network hosts
	ICMP: Internet Control Message Protocol
		
    ping [OPTION] destination
        -c #:发送的ping包个数;
        -w #:ping命令超时时长;
        -W #:一次ping操做中,等待对方响应的超时时长;
        -s #:指明ping包报文大小;

  还有一个命令为hping命令,能直接发送tcp/ip报文到网络主机的命令,包名为hping3 。

hping命令:(package hping3)
    ping3 - send (almost) arbitrary TCP/IP packets to network hosts
    
    --fast:
    --faster
    --flood
    -i uX

  接下来讲的是traceroute命令,它是实现路由跟踪的一个命令,它是源主机到目标主机之间到底通过了哪些路由器。

traceroute命令:
    
    跟踪从源主机到目标主机之间的网关;

  下一个介绍的就是ftp命令,该命令是一个客户端工具,遵循文件传输协议,该工具是基于ftp协议,访问ftp服务器的一个客户端工具。

ftp命令:
	ftp: file Transfer Protocol
	
		ftp服务命令行客户端工具;

  还有一种命令为lftp命令,用来取代传统的ftp客户端工具,还支持颜色区分以及命令补全及路径补全。

lftp命令:
    ftp [-d] [-e cmd] [-p port] [-u user[,pass]] [site]
    
    get, mget
    put, mput
    rm, mrm

  lftpget命令是一个下载工具,经过URL来下载资源,还能支持断点续传。

lftpget命令:
    lftpget [-c] [-d] [-v] URL [URL...]
        -c:断点续传;

  wget命令是一个下载工具,它是非交互式的网络下载器,其命令用法为:

wget命令:
    Wget - The non-interactive network downloader.
    
    wget [option]... [URL]...
        -b:在后台执行下载操做;
        -q:静默模式,不显示下载进度;
        -O file:下载文件保存的位置;
        -c:续传;
        --limit-rate=amount:以指定的速率传输文件;

2、bash循环

  咱们以前就讲到过,程序的执行顺序共有三种。

顺序执行
选择执行:if, case
循环执行:for, while, until

  那么对于for循环来讲,咱们以前也简单的介绍过该循环的格式为:

for循环格式:
    for VARIABLE in LIST; do
        循环体
    done

  除了for循环以外,还有while循环以及until循环,在这里咱们先说一下whil循环,在循环体中,有一个循环控制变量的表达试,所谓循环控制变量表达式就是必须使得让while循环的条件不在知足,因此也能够称之为循环控制变量的修正表达式,那么while循环的使用格式为:

while循环:
    while CONDITION; do
        循环体
        循环控制变量修正表达式
    done

  示例:求100之内正整数之和;

#!/bin/bash
# 
declare -i sum=0

for i in {1..100}; do
    let sum+=$i
done

echo $sum

###while###

declare -i sumary=0
declare -i i=1

while [ $i -le 100 ];do
   let sumary+=$i
   let i++
done

echo $sumary

  虽然看起来没有for循环那么好用,可是比for循环有更好的用途,对于列表生成来说,列表的量过大时,for循环其实性能很低,而while使用的是变量,因此只占据很小的内存空间而已,这是它们的区别及使用结构。

  那么在任何的状况下,都由进入条件和退出条件。

进入条件:CONDITION测试为"真";
退出条件:CONDITION测试为"假";

  接下来介绍的是until循环,使用格式与while循环没有什么区别,那么until循环格式为:

until CONDITION; do
    循环体
    循环控制修正表达式
done

  但不一样点在于until与while循环的条件控制是相反的。

进入条件:CONDITION测试为"假";
退出条件:CONDITION测试为"真";

  示例:

### until ###

until [ $i -gt 100 ]; do
    let sum+=$i
    let i++
done

  示例:建立10个用户,user101-user110;密码同用户名;

#!/bin/bash
#

for i in `seq 101 110`; do
    if  ! id user$i &> /dev/null; then
	    useradd user$i &> /dev/null
	    echo user$i | passwd --stdin user$i &> /dev/null
    else
	    echo "user exists"
	    exit 2
    fi
done
相关文章
相关标签/搜索