zoukankan      html  css  js  c++  java
  • linux之进程管理(一)

    进程

    定义

    一个正在执行的程序

    产生来源(仅针对linux中的进程)

    通过fork复制一份与父进程一模一样的子进程。然后再以exec的方式执行实际需要执行的进程即

    fork-and-exec

    流程

    从中我们可以发现,任何一个进程都是PID为1进程的子进程。也就是说,在linux环境下,进程的整体数据结构是一颗树

    我们把常驻内存的进程称之为服务

    多用户、多任务模式

    为什么linux中每个用户登录系统的系统后取得的权限不一样呢?

    其实每个用户在登录系统后会根据从/bin/bash文件结合用户的UID/GID而取得属于自己的shell(不同用户的shell PID是不同的),每个用户的环境变量以及一些私有配置文件是存放在~/.bashrc文件中的。

    我们知道,当前时代的CPU主频高达nG Hz,那就意味着CPU美妙可以执行

    n x 1024(M) x 1024(K) x 1024(Byte) ≈ n x 10^9

    条命令

    很显然,这是一个非常庞大的数字。我们学计算机操作系统时知道——当代CPU不具备并行(同一时刻同时执行N条指令)工作能力。都是并发处理事务的。所以我们眼中的多用户多任务多进程多线程实际上都只是cpu的障眼法而以,根本原因就是一个字——快。cpu通过在短时间内不停的切换任务,在我们人眼和思维中造成了同时执行的假象(正如视频的本质是图片一样)。

    那么我们如何感受一下这个所谓的多用户多任务模式呢?

    其实,在linux中,默认提供了7个登录窗口。可以通过

    ctrl + alt + [f1~f6]

    alt + [f1~f6]

    来切换

    工作管理(job control)

    job control是工作于bash环境下的,也就是说,我们仅仅需要一个终端界面便可以利用job control同时处理多条指令和任务

    .那么既然我们可以用多终端执行多个任务,那么为什么还需要用job control呢?其实,大家可以想一想作为普通工作人员,管理员可能给你多个账号吗?

    注意事项:

    前台:主窗口界面

    后台:利用job control控制的其他任务

    (1)job control是针对于bash的,也就是说,你不可以以user1的身份去管理user2中的job control

    (2)后台程序不可以与用户有交互过程(比如vim,nano)

    (3)后台程序不可以通过ctrl + c来中断

    (4)可以通过bg/fg来调用它

    1.如何将指定任务放在后台进行

    通过在命令后面加 & 操作符

    eg:

    find / -name info.txt &

    从图中我们可以发现该命令确实被放在后台了,那么下面的

    [1] 5115

    分别代表什么呢?

    [1]代表工作号码

    5115代表进程ID ==》 PID

    2.如何处理后台任务的标准输出问题

    这是什么意思?大家请看

    我们发现,面对一些具有标注输出的命令,这些东西会严重阻碍我们的工作,那么如何处理这类问题呢?简单,数据流重定向

    eg:

    sudo find / -name info.txt > log.txt 2>&1 &


    3.如何将当前工作丢到后台中去暂停?

    ctrl + z

    4.如何查看目前后台中运行的任务?

    jobs   -[lrs]

    -l:

    列出后台工作,并显示其进程PID

    -r:

    仅列出正在后台run的工作

    -s:

    仅列出正在后台当中暂停(stop)的工作

    5.将后台工作拿到前台来处理

    fg   %[jobnumber]

    eg:

    fg   &1

    6.将后台暂停的工作(被ctrl + z)变成在后台执行

    bg    %[jobnumber]

    7.管理后台的工作

    kill   -[信号]    %作业号码

    具体的信号可以使用Kill   -l来查看

    我们可以看出,9信号量代表着杀掉这个作业,所以可以这样写

    kill -9 %1
    

    代码中的1和2表示作业序号,具体情况依据个人查询情况而定。

    还有一点需要注意的是,kill 后面可以直接跟PID,如果跟工作的话,则需要 %number 了

    eg:


  • 相关阅读:
    SQL Server数据库查询区分大小写、全半角——排序规则的应用
    C#中查询字符串中是否包含指定字符/字符串,使用IndexOf还是Contains?
    【WM6.5】三星I8000按键码及窗体消息发送的方法备忘
    UoBlog 支持 MetaWeblog Api,可以使用 Windows Live Writer 离线发表日志
    C#中如何获取一个字符串的实际字符数
    使用HttpWebRequest发送HTTP请求,同时支持GET/POST方式提交。
    c#.NET中开发可用于Web网页的ActiveX控件
    CorePlex开发手记:一、Winform窗体皮肤及简单换肤机制
    .NET中简易实现线程安全
    在C#中截取指定长度的中文字符串(效率提高2500倍)
  • 原文地址:https://www.cnblogs.com/viplanyue/p/12700500.html
Copyright © 2011-2022 走看看