后台工作和程序管理

  • 后台工作和程序是什么?
  • 父程序和子程序
  • 后台工作
    • 后台运行——&
    • 丢到后台暂停——Ctrl+z
    • 观察当前后台工作——jobs
    • 将后台工作转为前台运行——fg
    • 让后台工作运行——bg
    • 管理后台工作——kill -num %jobnumber
    • 离线管理(真正的后台)——nohup
  • 程序
    • 查看程序
      • ps
      • top
      • pstree
    • 管理程序
      • kill -num PID
      • killall -num cmd
  • 优先级
    • nice
    • renice
  • 系统资源的观察
    • free
    • uname
    • uptime
    • netstat
    • dmesg
    • vmstat
    • fuser
    • lsof
    • pidof

后台工作和程序是什么?

后台工作指运行在后台,不依赖当前环境执行的工作

  • program:通常为2进制文件,放置在存储设备中
  • process:program被执行后,2进制文件会被加载到内存,系统会分配一个PID用于识别不同process

这里的程序指的是 process

父程序和子程序

在父bash中再次执行bash,会打开子bash,子bash的PPID即为父bash的PID

后台工作

后台运行——&

在一个bash中想要同时进行多个工作,可用 & 将工作放到背景环境中去执行,如下在后台压缩打包/etc,[1]表示工作号码,3859表示PID

可看到命令进入后台运行,当前仍可操作bash运行ls命令,过一会出现 Done 表示后台工作已结束

丢到后台暂停——Ctrl+z

操作 Ctrl+z 可将当前的工作放到后台暂停

观察当前后台工作——jobs

命令 jobs 可查看当前后台的工作,-l 除列出工作号码与指令外,还列出PID,-r 仅列出在后台运行的工作,-s 仅列出在后台暂停的工作

+表示预设的调用工作,即当有2个暂停的背景工作时,只输入命令 fg 会把带+的工作拿到前台中处理

+代表最近被放到后台的工作,-代表最近倒数第2个被放到后台的工作,超过3个后台工作就不会显示+/-

将后台工作转为前台运行——fg

命令 fg %jobnumber 将后台工作转为前台运行,%jobnumber 为工作号码

如上,将 vi 命令转为前台再退出,再查看时已不在

让后台工作运行——bg

Ctrl+z 会让前台工作丢到后台暂停,而命令 bg 则可让后台工作继续运行

如上图,可看到通过 bg 后,后台任务由Stopped转为了Running

管理后台工作——kill -num %jobnumber

命令 kill -num %jobnumber 用于管理后台工作,-l 显示可执行的操作,- num 可进行不同的操作,常见的有:1启动被终止的程序,2发出Ctrl+c,9强制删除,15正常终止,19发出Ctrl+z

如上,可看到执行kill后,后台任务由Stopped转为Killed,再查看就不见了,需要注意的是强制结束vi,生成的临时文件 .swp不会被删除(只有正常退出才会自动删除)

离线管理(真正的后台)——nohup

上面说的后台工作指的是bash的后台(只是让工作不在当前bash中占着,其实也可以另开一个终端干别的工作),并不是真正的系统后台,用户下线后工作不会再继续运行,可通过命令 nohup [指令] & 在系统后台运行

如上编写一个在50s后输出一段话的脚本,使用nohup置于后台运行,输出内容会被重定向到~/nohub.out中,退出root等运行完后再登陆可查看已有输出

程序

查看程序

ps

命令 ps 列出某个时间点程序的运行情况,-a 列出不与终端有关的程序,-u列出有效使用者的程序,-x 列出其他信息,-A 列出所有程序,-l 将较详细的PID信息列出,-j 工作的格式,-f 更完整的输出

如上命令 ps -l 查询与当前bash有关的程序,各字段解释如下

  • F:程序权限,4为root,1为此程序仅进行fork而没有执行
  • S:程序状态,R运行,S睡眠(可唤醒),D睡眠(不可唤醒,通常在等待I/O),T停止,Z僵尸程序(已终止但未移出内存)
  • UID/PID/PPID:程序被该UID的用户所拥有/程序识别码/父程序PID
  • C:CPU使用率
  • PRI/NI:Priority/Nice,优先级,越小越容易被执行
  • ADDR:程序在内存的哪个部分,如果是正在运行的程序则为 -
  • SZ:消耗的内存
  • WCHAN:是否在运行中,-为运行中
  • TTY:用户的终端界面
  • TIME:消耗的CPU时间
  • CMD:命令

如下命令 ps aux 查询所有系统运行的程序

  • USER:该程序所属用户
  • PID:程序识别码
  • %CPU / %MEM:消耗的 CPU / 内存 百分比
  • VSZ:消耗的虚拟内存量
  • RSS:占用的固定内存量
  • TTY:终端,若与终端无关则为?
  • STAT:程序状态,与ps -l的S相同
  • TIME:实际使用的CPU运行时间
  • COMMAND:命令

如下命令 ps axjf 列出程序树

top

命令 top 可动态观察程序运行的状态,-d 设置刷新秒数(默认5秒),-b 以批次的方式执行top,-n进行多少次输出结果,-p 指定某PID进行观察

而在top执行过程中可使用的按键指令有:?显示top可输出的按键指令,P / M / N / T以CPU使用率 / 内存使用率 / PID / 消耗的CPU时间 排序,k给某个PID一个讯号,r给某个PID重设Nice值,q离开top

  • 第一行:当前时间、从开机到现在经过的时间、用户数、1-5-15分钟的平均工作负载
  • 第二行:目前程序的个数与状态
  • 第三行:CPU整体负载
  • 第四五行:目前实体内存和虚拟内存的使用情况
  • 第六行:空白行,显示在top中输入的按键指令
  • 第七行:表头,相关属性已在ps中介绍

pstree

命令 pstree 可用于查找程序之间的相关性,-A以ASCII字符连接,-U以Unicode连接,-p同时列出PID,-u同时列出所属账号

管理程序

kill -num PID

与后台工作管理一样,程序的管理也是命令 kill ,但后面接的是程序的PID

killall -num cmd

上面的指令在下达时还需要找到对应程序的PID,而 killall 可根据指令名称来管理程序,- i 删除时给出提示,-I 忽略大小写

优先级

程序的优先级由 PRI 值决定,值越低越优先,但用户无法直接调整 PRI 值,而是要透过 Nice 值,PRI(new) = PRI(new) + Nice

  • Nice 值可调整范围为 [-20,19]
  • root 可随意调整自己或他人的 Nice 值,范围为 [-20,19]
  • 一般用户仅可调高自己程序的 Nice 值,范围为 [0,19] (避免占用系统资源)

nice

命令 nice 可对新执行的指令给予一个 Nice 值,-n 后面加上要调整的数值


如上,vi由bash衍生,PRI和NI本应该是 80 0,减5后变成 75 -5

renice

命令 renice [number] PID 用于调整以存在程序的 Nice 值


如上,虽然调整的是bash的Nice值,但ps的Nice值也跟着变化,说明其具有传递性

系统资源的观察

free

命令 free 可观察内存使用情况,-bmkg指定单位,-h由系统指定单位,-t显示实际内存与swap的总量,-s 指定几秒钟输出一次,-c 指定输出次数

uname

命令 uname 可查阅系统核心的有关信息,-a 列出所有,-s 列出核心名称,-r 列出版本,-m 列出硬盘名称,-p 列出CPU类型,-i 列出硬盘平台

uptime

命令 uptime 可用于显示top的第一行

netstat

命令 netstat 用于检测网络,-a 列出所有,-t / -u 列出tcp / udp网络封包的资料,-n以端口号展示,-l 列出目前正在网络监听的服务,-p列出该网络服务程序PID

分为两部分,上半部分为网络的连接

  • Proto:封包协议,tcp或udp
  • Recv-Q:非由使用者程序连接到此socket的复制的总byte数
  • Send-Q:非由远程主机传送过来的acknowledge总byte数
  • Local Address:本地IP:port
  • Foreign Address:远程IP:port
  • State:连接状态

下半部分为socket file

  • Proto:一般为unix
  • RefCnt:连接到此socket的程序数量
  • Flags:连线标志
  • Type:socket存取类型,确认连线的STREAM与不需要确认的DGRAM
  • State:当前状态
  • PATH:连接到此socket的相关程序路径或者是资料输出的路径

dmesg

所有核心检测的信息,不管是开机时还是系统运行时产生的,都会被记录到内存的某个字段,而命令 dmesg 将该字段的信息读取出来

vmstat

命令 vmstat [延迟时间] [次数] 可动态监测系统资源变化,-a 使用inactive/active代替buffer/cache输出,-f列出系统fork的程序数,-s 列出内存变化情况,-S指定单位,-d / -p列出硬盘/分割槽读写总统计量


如上执行vmstat,每秒1次,共3次,各栏位为

  • proces:r 等待运行的程序数量,b不可唤醒的程序数量(越多表示越忙碌)
  • memory:swpd虚拟内存被使用的容量,free/buff/cache 未被使用/缓存/快存
  • swap:si由硬盘中将程序取出的量,so由于内存不足而将没用到从程序写到硬盘的swap的容量,si/so越大表示效率越低
  • io:bi/bo 从硬盘读入/写出的block数量
  • system:in每秒中断次数,cs每秒事件切换次数
  • cpu:us/sy非核心层/核心层的CPU使用状态,id闲置状态,wa等待i/o所耗费的cpu状态,st被虚拟机所盗用的cpu状态

fuser

命令 fuser 可根据文件查找使用该文件的程序(如在卸载中显示device is busy,则可用fuser跟踪该文件系统正在被哪个程序使用)

-u列出程序owner,-m 查找当前使用该文件系统的程序(多用于unmount不成功),-v 列出文件、程序、指令的相关性,-k 删除该程序,-i删除前询问


如上,意思为当前目录下有PID为2760,属于root,且指令为bash的程序,而ACCESS可分为:c程序在当前目录下,e可被触发为执行,f是一个打开的文件,r代表顶级目录,F文件已打开但等待回应中,m动态函数库

如上,加上-m可显示占用当前目录所在文件系统的所有程序

lsof

与上面相反,命令 lsof 根据程序查找该程序使用的文件,-U 仅列出socket文件,-u 列出某用户相关程序使用的文件,-d 列出某目录被使用的文件

如上,列出root的bash程序所使用的文件

pidof

命令 pidof 找到某个程序的PID。-s仅列出一个,-x列出该程序可能的PPID

Linux基础——后台工作和程序管理相关推荐

  1. linux基础知识_压缩—进程管理-网络管理-ftp-nfs-ssh-scp

    linux基础知识_压缩-进程管理-网络管理-ftp-nfs-ssh-scp 1.压缩包管理 gzip .gz格式的压缩包,不打包,分别压缩,原文件消失 bzip2 .bz2格式的压缩包,原文件不会消 ...

  2. Linux在后台运行python程序、脚本程序、可执行程序等,关闭终端仍可保持程序运行

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 Linux在后台运行python程序.脚本程序.可执行程序等,关闭终端仍可保持程序运行 文章目录: 1 为什么需要后台运 ...

  3. 【linux基础】16、软件包管理

    一.软件包概述 1.相关概念 源码安装操作系统方式:通过宿主机安装 GPL:公布源码(c,c++) POSIX规范:Portable Operatin System (原代码)移植性 API:应用编程 ...

  4. linux java后台运行_Java程序在Linux中实现后台运行

    1.运行脚本 脚本如下,这个脚本存在一点问题,Log4j稍微有点问题,但是对运行及日志记录没有影响,日志是通过将所有控制台数据全部写入文件的形式记录的. #!/bin/sh #author:wangc ...

  5. Linux基础学习之Day12-网络管理基础

    Linux基础学习之从入门到精通Day12 网络管理基础 使用NetworkManager管理网络 网络管理器(NetworkManager)是一个动态网络的控制器与配置系统,它用于当网络设备可用时保 ...

  6. linux下后台启动切换目录,如何让Linux下后台运行的程序到前台来

    满意答案 wc34071209 2016.12.24 采纳率:53%    等级:10 已帮助:719人 linux前后台任务切换方法: 1.在Linux终端运行命令的时候,在命令末尾加上 & ...

  7. iOS UI基础-4.1应用程序管理 字典转Model

    用模型取代字典 使用字典的坏处 一般情况下,设置数据和取出数据都使用"字符串类型的key",编写这些key时,编辑器没有智能提示,需要手敲 dict[@"name&quo ...

  8. linux yum list包数量少,Linux基础知识之YUM包管理工具

    一.YUM简介 1.YUM: Yellowdog Update Modifier 完成RHEL系列前端自动解决依赖关系安装工具,依赖rpm存在 2.工作模式:C/S架构 Server端(yum仓库): ...

  9. linux服务器后台运行Python程序

    1.大数据量数据的训练耗时较长,比较好的方法是放到远程服务器后台让其运行,将打印信息输出至log文件就好. 命令如下: nohup python -u test.py > test.log 2& ...

最新文章

  1. Spring Batch 介绍
  2. 2021-07-26 TypeError: can‘t convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the
  3. 网络和大数据成为重要文化生产力
  4. python语言实例-Python语言实现百度语音识别API的使用实例
  5. STL---string
  6. 【三分+枚举】LNOI2017 d1t1 期末考试
  7. Eclipse error: “The import XXX cannot be resolved”
  8. python predict_proba_sklearn中的predict_proba方法的返回值的意义
  9. Linux学习之系统编程篇:线程同步的引出和思想
  10. linux 嵌入式串口通信,基于linux的嵌入式串口通信综述.doc
  11. python简单爬虫代码-用Python编写一个简单的爬虫
  12. 圈圈USB学习笔记5--关于HID协议
  13. 网易易盾—推理拼图验证码的破解
  14. PR更改视频画布大小。PR剪裁视频。PR导出视频时的适应视屏大小都是啥意思啊?
  15. 在线供应链系统服务方案:构建企业供应链平台业务、功能、技术管理架构
  16. 用C语言程序进行比赛日程排列
  17. 设置hr标签的粗细及颜色
  18. dubbo官网最新版导航
  19. 解决ubuntu18 上网速度慢的问题(已经确定没用,你的网速慢就是网速慢)
  20. 计算机二进制由来阴阳,二进制来源于八卦?

热门文章

  1. 大学生团体合作主题班会
  2. VuePress 完整使用教程
  3. ①HTML介绍及标签用法
  4. CSGO在完美对战平台和官匹启动后秒退问题
  5. unigui手机拍摄身份证识别
  6. magic method in Python
  7. html把数字转换成日期,表格中如何把数字改为日期 表格中打数字会变成日期是怎么回事?...
  8. url 微信公众号开发 配置失效_微信开发者中心配置服务器url时token验证失败的原因和处理方法...
  9. CAD异常关闭、闪退没保存?通过CAD自动保存抢救你的文件。
  10. C语言单链表初学容易掉的坑