-p jobs linux

2016-12-16 22:33:39 Quincuntial 阅读数 5875

文章作者:Tyan
博客:noahsnail.com  |  CSDN  |  简书

在Linux中,启动、停止、终止以及恢复作业的这些功能统称为作业控制。作业控制中的关键命令是jobs命令,jobs命令允许查看shell当前正在处理的作业。jobs命令中输出有加号和减号,带加号的作业被当做默认作业,带减号的为下一个默认作业。

$ ./test10.sh > testout
^Z
[1]+  Stopped                 ./test10.sh > testout

# 查看当前作业
$ jobs
[1]+  Stopped                 ./test10.sh > testout

# -l,列出进程的PID和作业号
$ jobs -l
[1]+ 96267 Suspended: 18           ./test10.sh > testout

# -p,只列出作业的PID
$ jobs -p
96267

# -s,只列出停止的作业
$ jobs -s
[1]+  Stopped                 ./test10.sh > testout

# -r,只列出运行的作业
$ jobs -r

$ jobs -l
[1]+ 96267 Suspended: 18           ./test10.sh > testout
[3]- 96292 Done                    ./test10.sh > testb
2018-08-26 22:22:17 qq_21439395 阅读数 3578

 

版权声明:本文为博主原创文章,未经博主允许不得转载!!

欢迎访问:https://blog.csdn.net/qq_21439395/article/details/82085449

交流QQ: 824203453

进程综述:

进程和程序的区别:

1、程序是静态概念,本身作为一种软件资源长期保存;而进程是程序的执行过程,它是动态概念,有一定的生命期,是动态产生和消亡的。

2、程序和进程无一一对应关系。一个程序可以由多个进程共用;另一方面,一个进程在活动中有可顺序地执行若干个程序。

父进程与子进程:

1、子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程。

2、在Linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。

3、父进程终止子进程自然终止。

进程和线程的区别:

进程: 就是正在执行的程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。

线程: 轻量级的进程;进程有独立的地址空间,线程没有;线程不能独立存在,它由进程创建;相对讲,线程耗费的cpu和内存要小于进程。

前台进程和后台进程:

 

前台进程:

在Shell提示处打入命令后,创建一个子进程,运行命令,Shell等待命令退出,然后返回到对用户给出提示符。这条命令与Shell异步运行,即在前台运行,用户在它完成之前不能执行另一个命令。

后台进程:

在Shell提示处打入命令,若后随一个&,Shell创建的子进程运行此命令,但不等待命令退出,而直接返回到对

用户给出提示。这条命令与Shell同步运行,即在后台运行。后台进程必须是非交互式的。

 

进程状态:

就绪:进程已经分配到资源,但因为其它进程正占用CPU,所以暂时不能运行而等待分配CPU的状态。

等待:因等待某种事件而暂时不能运行的状态。

运行:进程分配到CPU,正在处理器上运行。

进程状态细化:

用户态运行:在CPU上执行用户代码

核心态运行:在CPU上执行核心代码

在内存就绪:具备运行条件,只等调度程序为它分配CPU

在内存睡眠:因等待某一事件的发生,而在内存中排队等待

在外存就绪:就绪进程被交换到外存上继续处于就绪状态

在外存睡眠:睡眠进程被交换到外存上继续等待

在内存暂停:因调用stop程序而进入跟踪暂停状态,等待其父进程发送命令。

在外存暂停:处于跟踪暂停态的进程被交换到外存上

创建态:新进程正在被创建、但尚未完毕的中间状态

终止态:进程终止自己

 

查看用户信息 w:

1,w显示信息的含义

    JCPU:以终端代号来区分,该终端所有相关的进程执行时,所消耗的CPU时间会显示在这里

    PCPU:CPU执行程序耗费的时间

    WHAT:用户正在执行的操作

2,查看个别用户信息:w 用户名

3,w显示信息的含义

    load average:分别显示系统在过去1、5、15分钟内的平均负载程度。

    FROM:显示用户从何处登录系统,“:0”的显示代表该用户时从X Window下,打开文本模式窗口登录的

    IDLE:用户闲置的时间。这是一个计时器,一旦用户执行任何操作,该计时器便会被重置

 

查看系统中的进程 ps:

    ps - report a snapshot of the current processes

 

    ps命令查找与进程相关的PID号:  最常用的方法是 ps  aux 
    ps a 显示现行终端机下的所有程序,包括其他用户的程序。
    ps -A 显示所有程序。
    ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
    ps -e 此参数的效果和指定"A"参数相同。
    ps e 列出程序时,显示每个程序所使用的环境变量。
    ps f ASCII字符显示树状结构,表达程序间的相互关系。
    ps -H 显示树状结构,表示程序间的相互关系。
    ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
    ps s 采用程序信号的格式显示程序状况。
    ps S 列出程序时,包括已中断的子程序资料。
    ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
    ps u 以用户为主的格式来显示程序状况。
    ps x 显示所有程序,不以终端机来区分。

常用选项

    a:显示所有用户的进程

    u:显示用户名和启动时间

    x:显示没有控制终端的进程

    e:显示所有进程,包括没有控制终端的进程

    l:长格式显示

    w:宽行显示,可以使用多个w进行加宽显示

eg:ps -ef|grep *** 查询进程,如果有多个,可再加通道|grep  ***

删除进程时,如果有多个进程,不能直接区分启动的目录

则可以使用 cd /proc/PID,再ll一下,就能看到启动的目录了

3,查看系统中所有进程

# ps aux     #查看系统中所有进程,使用BSD操作系统格式

# ps -le        #查看系统中所有进程,使用Linux标准命令格式

ps -aux常用输出信息的含义

    USER:用户名

    PID:进程号

    PPID:父进程的进程号

    %CPU:占用CPU时间和总时间的百分比

    %MEM:占用内存与系统内存总量的百分比

    VSZ:该进程占用虚拟内存的大小,单位是KB

    RSS:该进程占用实际物理内存的大小,单位是KB

    TTY:进程启动的终端,其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端

    STAT:进程当前状态    S休眠状态,D不可中断的休眠状态,R运行状态,Z僵死状态,T停止,s:包含子进程,+:位于后台

    START:该进程的启动时间

    NI:进程优先级

    TIME:进程自从启动以来占用CPU的总时间

 

    COMMAND/CMD:进程的命令名

ps应用实例

    # ps      查看隶属于自己的进程
    # 
ps -u or -l     查看隶属于自己进程详细信息
    # ps -le or -aux     查看所有用户执行的进程的详细信息
    # ps -aux --sort pid    可按进程执行的时间、PID、UID等对进程进行排序

    # ps -aux | grep sam    查看用户sam执行的进程 
    # ps -uU sam               查看用户sam执行的进程  
    # ps -le | grep init        查看指定进程信息

 

进程管理的作用

1,判断服务器健康状态

2,查看系统中所有进程

3,杀死进程

 

kill – 杀死进程

为什么要杀死进程

    1,该进程占用了过多的CPU时间
    2,该进程占用了过多的CPU时间无法运行
    3,运行时间过长,但没有预期效果
    4,产生了过多到屏幕或磁盘文件的输出
    5,无法正常退出

 kill

kill [ -s signal | -p ] [ -a ] pid ... 
kill -l [ signal ] 
kill 
送出一个特定的信号 (signal) 给行程 id  pid 的行程根据该信号而做特定的动作若没有指定预设是送出终止 (TERM) 的信号 
-s (signal):
其中可用的讯号有 HUP (1), KILL (9), TERM (15), 分别代表着重跑砍掉结束详细的信号可以用 kill -l 
-p:
印出 pid , 并不送出信号 
-l (signal):
列出所有可用的进程信号

常用的进程信号:

 

kill –,关闭进程

关闭进程:kill进程号

    kill -9 进程号(强行关闭)
    kill -1 进程号(重启进程)

关闭图形程序:xkill

结束所有进程:killall

    killall -i    交互式,询问是否要杀死某个进程

    killall -0   进程名   检测进程是否存在,

    killall -I    忽略进程名的大小写

查找服务进程号:pgrep 服务名称
关闭进程:pkill 进程名称

    pkill -t  终端号:    按照终端号踢出用户

怎么使用pkill呢?

1,w命令 查询本机已登录的用户,TTY(终端号)

2,pkill -9 -t    pst/1    强制杀死从pst/1虚拟终端登录的进程


 

进程前后台运行切换:

把进程放入后台

1,在命令后加 &

2,在执行命令的过程中,按下ctrl+z快捷键(可以以top命令示范)

 

查看后台的工作

jobs    [-l]

-l    显示工作的PID

"+"号代表最近一个放入后台的工作,也是工作恢复时,默认优先恢复的工作。"-"号代表倒数第二个放入后台的工作。

 

后台暂停的工作恢复到前台执行

# fg  %工作号

参数:%工作号:    %号可以省略,但是注意工作号和PID的区别 

补:如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

 

后台暂停的工作恢复到后台继续执行

# bg    %工作号

注:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行

补:如果后台中有多个命令,同样可以用bg %jobnumber将选中的命令调出

比如说,top命令和vi命令,是不能在后台恢复执行的

nice和renice

nice
    指定程序的运行优先级
    格式:nice -n command
    例如:nice -5 myprogram

renice
    改变一个正在运行的进程的优先级
    格式:renice n pid
    例如:renice -5  777
    优先级取值范围为(-20,19)*

nohup


 

使进程在用户退出登陆后仍旧继续执行,nohup命令将执行后的数据信息和错误信息默认储存到文件nohup.out中
格式:
nohup program &

进程的挂起和恢复

 进程的中止(挂起)和终止
        挂起(Ctrl+Z)
        终止(Ctrl+C)
进程的恢复
        恢复到前台继续运行(fg)
        恢复到后台继续运行(bg)
查看被挂起的进程(jobs)

top     

查看系统健康状态  

作用:进程状态显示和进程控制,每3秒钟自动刷新一次(动态显示)
常用选项:
    -d:    指定刷新的时间间隔    默认是3秒
    c:    显示整个命令行而不仅仅显示命令名

    u:    查看指定用户的进程
    k:    终止执行中的进程
    h or ?:    获得帮助
    r:    重新设置进程优先级
    s:    改变刷新的时间间隔
    W:    将当前设置写入~/.toprc文件中

    P:以CPU使用率排名,默认项

    M:以内存的使用率排名

    N:以PID排序

    q:退出top

 

版权声明:本文为博主原创文章,未经博主允许不得转载!!

欢迎访问:https://blog.csdn.net/qq_21439395/article/details/82085449

交流QQ: 824203453

2019-02-27 11:39:02 a3748622 阅读数 636

转载自:https://www.cnblogs.com/Engineer-Lai/p/8005455.html

 

在按照以下博客搭建环境是成功了的,不过中途也遇到了一些问题。

 

1、vim的操作

   退出vi
   :q!  不保存文件,强制退出vi命令
   :w   保存文件,不退出vi命令
   :wq  保存文件,退出vi命令

这里要注意,按下ESC退出编辑,比如说保存并推出VI,需要先输入“:”再输入wq

 

2、关于source /etc/profile

在使用“sudo vim /etc/profile”将环境变量路径添加到profile后,需要使用指令:source /etc/profile使之生效。

但是,下一次重新打开终端,需要再次:source /etc/profile,否则无法:make menuconfig 打开命令台界面

解决办法是:sudo vim ~/.bashrc

将路径添加到 bashrc文件里面,而不是 profile。

 

 

 

Esp32 Ubuntu 环境搭建篇

始言:到了年尾的12月想做点什么.于是这个计划就出来了——wifi/蓝牙的等离子音箱.接着选中了这个模块.原因很简单,便宜.顺带接触一下ubuntu系统入门.

 

概述:

  Ubuntu16.0.4下的ESP环境搭建.并实现一个hello world例程.(16.0.4是官方推荐版本,比这个低的话建议还是更新一下,否则开发工具链会出现一些错误,修复起来也浪费时间),这里是根据网上搜索后自己成功搭建的一个经验记录.仅供参考

 

1. 安装交叉编译工具链

控制台下安装交叉编译工具链依赖的环境:sudo apt-get install git make gcc libncurses5-dev flex bison gperf python-serial

(控制台打开方法:Ctrl+Alt+T;后面不再供述)

 

2. 创建目录

  ① 创建ESP32专用的工作目录:

  sudo mkdir /esp32

  ②设置文件夹的归属为当前用户:

  sudo chown user:user /esp32  

  (注意这里的user是你的机器用户名 我这里是laixiaojie:laixiaojie 创建完后你可以在 ”我的电脑” 里找到这个文件夹.控制台进入命令为:cd  /esp32 ) 

  ③esp32文件夹里创建三个文件夹:crossTools、demos、sources分别保存交叉编译工具链、样例和SDK源码 命令:

  mkdir crossTools demos sources

  ④使用ls命令查看一下/esp32目录下的文件

 

3. 下载交叉编译工具

  ① 进入crossTools文件夹,下载官方的交叉编译工具:(这里是2017.12 下载的最新版本,请各位根据自己当前的时段下载对应版本的交叉编译器以免编译时候提示失败.)

  https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-75-gbaf03c2-5.2.0.tar.gz(这个不是命令 请打开你的搜狐浏览器输入这个,就能下载了,下载完后剪切到/esp32/crossTools里面)

  ②解压文件到当前目录下:

  tar -xzvf xtensa-esp32-elf-linux64-1.22.0-75-gbaf03c2-5.2.0.tar.gz

   ③使用ls命令查看一下/esp32/crossTools目录下的文件

   

 

3. 添加环境变量

  Tip:没有vim 请输入以下命令安装 sudo apt-get install vim

  ①sudo vim /etc/profile

   在最后面添加交叉编译工具链bin文件夹的目录

  (鼠标滚到最下 1、按 i 键进行编辑输入下面的语句后          2、按ESC退出编辑               3、输入 :wq 保存退出)

  export PATH=$PATH:/esp32/crossTools/xtensa-esp32-elf/bin

       

 

  ③ 然后更新一下profile文件,使之生效

  source /etc/profile

  ④ 检查是否安装成功

  xtensa-esp32-elf-gcc -v

   

4. 下载官方SDK : Espress-idf 到source文件夹

  

   ①官方已经开源托管在了github上,我们可以使用git clone命令进行下载

  git clone --recursive https://github.com/espressif/esp-idf.git

 

  .............等待下载结束

 

  下载完成后,剪切文件到source文件夹打开ESP-IDF的目录结构如下:

  components:ESP-IDF的核心组件

  examples:ESP-IDF提供的实例程序

  make:ESP-IDF工程管理目录

  tools:ESP-IDF提供的工具集

  docs:ESP-IDF相关文档

 

5.添加Esp-idf环境变量

  ① 将ESP-IDF目录下examples中的hello_world样例拷贝到我们之前新建的demo文件夹中

  ② 进入工程文件中,使用tree命令(没有这个命令的输入 sudo apt-get install tree下载)查看工程结构  

  

  ③可以看到整个工程主要有一个hello_world_main.c和一个Makefile,打开Makefile,发现里面需要一个IDF_PATH的变量,这个变量应当指向安装的ESP-IDF的实际位置,需要在编译的时候指明。

  

  ④最佳的方式是/etc/profile中添加下面这样一个环境变量(添加环境变量步骤具体方法请看步骤3)

  export IDF_PATH=/esp32/sources/esp-idf

  

6.配置项目工程

  ①在/esp32/demos/hello_world/目录下 输入命令进入菜单设置:

  make menuconfig(注意控制台的窗体大小放大一点否则会报错)

  进入后,命令台界面如下

  

 

  ② 进入SDK tool configuration查看交叉编译工具链是否指定正确,已经python命令是否正确安装,ESP-IDF需要你的python属于python2的版本,最好不要实用python3

  

 

  ③ 进入Bootloader config目录,配置bootloader的打印日志显示信息等级为warning

  

  

  

  

  

  

  ④进入Serial flasher config,指定用于烧写程序的串口设备,一般使用USB转串口的选择/dev/ttyUSB0即可,设置默认的波特率为115200,Flash的SPI模式为DIO,SPI速率为80MHz,Flash的大小为4MB(默认就好)

  

 

  ⑤进入Partition Table设置分区表,为了更好的管理SPI Flash,ESP-IDF引入了分区表的概念,默认使用Single factory app,no OTA制作分区BIN(略默认就好,各位看家可以自己点进去瞅瞅)

  ⑥ Component config是对ESP-IDF的内核进行的更加详细的配置(略 默认就好)

  ⑦最后选择 Exit 退出make menuconfig的配置界面,保存刚才的配置,将会在工程根目录下看到新生成的一个build文件夹和sdkconfig文件

 

 7.编译

  ① 在/esp32/demos/hello_world下输入编译命令生成bin文件,make all将会编译所有的BIN文件,默认会编译bootloader、partition_table、app文件,并且还会提示如何进行烧写。

  make all -j8  或者  make all -j

  (“-j [<jobsnum>]” “--jobs[=<jobsnum>]” 指同时运行命令的个数。如果没有这个参数,make运行命令时能运行多少就运行多少。如果有一个以上的“-j”参数,那么仅最后一个“-j”才是有效的。(注意这个参数在MS-DOS中是无用的))

  

   如果有报错 有可能是没有让环境变量运行起来 输入 source /etc/profile 再编译试试.

8.烧写

  ①输入make flash 命令下载(按照官方的说明 要先长按开发板boot键不放然后按一下Reset键进入下载模式,but 我发现无视这个直接执行命令也是ok的)  失败的话有可能是 USB读写权限没开放(请参考步骤9打开权限,然后重新下载)

  

  ②输入命令打开minicom 查看: sudo minicom -D /dev/ttyUSB0 (这里指定打开USB0)

    ****没有minicom的童鞋 请输入 sudo apt-get install minicom 进行安装.*****

   

  

 

番外:

 1、USB读写权限(这个只需要配置一次

  在烧写程序之前,需要给USB设备增加读写权限

  sudo usermod  -a  -G  dialout  $USER

  

  然后需要重启系统以生效

  sudo reboot

2、mini

/————————————————————————————————————————完结撒花

 

总的来说ubuntu系统还是蛮有意思的.刚刚接触 也熟悉了不少命令. 接下来进入ESP32的开发篇一GPIO.(终于来点我认识的东西了.........)

2011-01-17 12:08:00 c05170519 阅读数 3432

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { color: #0000ff; so-language: zh-CN } -->

1 、源码下载

Crosstools-ng 下载地址

http://ymorin.is-a-geek.org/download/crosstool-ng/

同时对每一个版本都有相应的补丁我们尽量把这些补丁打上,这些补丁的下载地址是

http://ymorin.is-a-geek.org/download/crosstool-ng/01-fixes/

我这里选用的是 crosstool-ng-1.8.1.tar.bz2

并下载补丁

000-scripts_log_do_not_interpret_log_string_as_printf_format.patch

001-binutils_binutils_remove_faulty_patch.patch

002-kconfig_resync_curses_check_with_Linux_kernel.patch

2 、工具的安装

在使用之前必须安装一些软件

$ sudo apt-get install gawk autotools-dev automake texinfo libtool cvs patch bison flex libncurses5-dev

  1. 必要目录的创建

$ mkdir toolchain_build

$ mkdir toolchain_install

  1. 解压源码并打补丁

$ tar xvf crosstool-ng-1.8.1.tar.bz2

$ cd crosstool-ng-1.8.1

$ patch –p1 <   000-scripts_log_do_not_interpret_log_string_as_printf_format.patch

$ patch –p1 <   001-binutils_binutils_remove_faulty_patch.patch

$ patch –p1< 002-kconfig_resync_curses_check_with_Linux_kernel.patch

  1. 配置并编译 crosstool-ng-1.8.1

$ ./configure --prefix=/home/linux/s3c2410-2.6.35/toolchain/toolchain-install

$ make

$ make install

  1.  配置工具链选项

$ cd ../toolchain-build

$ cp ../crosstool-ng-1.8.1/samples/arm-unknown-linux-gnueabi/* ./

$ mv crosstool.config .config

$ ../toolchain-install/bin/ct-ng menuconfig

Paths and misc options --->

(${HOME}/src) Local tarballs directory

(${HOME}/x-tools/${CT_TARGET}) Prefix directory

修改为

Paths and misc options --->

(/home/linux/Downloads) Local tarballs directory // 源码包存放路径

(/home/linux/toolchain) Prefix directory // 工具生成后的安装路径

 

 

Target options --->

(armv4t) Architecture level

(arm9tdmi) Emit assembly for CPU

(arm920t) Tune for CPU

 

C compiler --->

[ ] Java

 

Operating System --->

[ ] Check installed headers

 

Paths and misc options --->

(1) Number of parallel jobs

 

Toolchain options --->

(none) Tuple's vendor string

 

C compiler --->

(crosstool-NG-${CT_VERSION}-farsight) gcc ID string

 

修改 .config 文件,将文件中的 2.6.33.2 全部改为 2.6.35

  1.  目标代码准备

拷贝下面文件到 /home/linux/Downloads 目录下:

binutils-2.19.1.tar.bz2

gcc-4.3.2.tar.bz2

glibc-ports-2.9.tar.bz2

linux-2.6.35.tar.bz2

ncurses-5.7.tar.gz

dmalloc-5.5.2.tgz

gdb-6.8.tar.bz2

gmp-4.3.2.tar.bz2

ltrace_0.5.3.orig.tar.gz

strace-4.5.19.tar.bz2

duma_2_5_15.tar.gz

glibc-2.9.tar.bz2

libelf-0.8.13.tar.gz

mpfr-2.4.2.tar.bz2

Sstrip.c

  1. 工具链编译

$ ../toolchain-install/bin/ct-ng build

这个过程比较时间比较长

  1. 环境变量的添加

修改文件 /etc/bash.bashrc 添加如下内容 最好在 /etc/profile   qtcreator似乎只认后者

export PATH=$PATH:/home/linux/toolchain/bin

重启配置文件

$ source bash.bashrc

  1. 工具链的测试

$ arm-none-linux-gnueabi-gcc –v

2013-11-10 16:15:00 weixin_33849942 阅读数 333

转:http://www.cnblogs.com/lwgdream/p/3413571.html

 

前言

我们可以将一个程序放到后台执行,这样它就不占用当前终端,我们可以做其他事情。而jobs命令用来查看后台进程的状态信息。

使用说明

-l 显示后台进程的信息,显示格式 [Job ID] [+-] PID CMD (当前任务用+表示,其他非当前为-)

-p 只显示PID

-r 只显示运行重的进程,任务的状态可为running、Terminated、stopped、done等

running表示正在运行

stopped 表示已经被挂起,那么不再会被调度,除非重新恢复

done 正常运行完成

Terminated 中止,比如通过kill命令杀死

使用举例

jobs 显示后台任务信息

默认不现实PID,-l 显示完整格式,包括PID

显示格式: 【任务ID】 进程PID 状态status 程序名

   1: [root@master lianxi]# sh test.sh &
   2: [1] 13482
   3: [root@master lianxi]# jobs
   4: [1]+  Running                 sh test.sh &
   5: [root@master lianxi]# jobs -l
   6: [1]+ 13482 Running                 sh test.sh &

jobs –p 只显示PID

   1: [root@master lianxi]# jobs -p
   2: 13482

jobs –r 只显示running状态的进程

   1: [root@master lianxi]# jobs -rl
   2: [1]+ 13482 Running                 sh test.sh &

总结

将进程放到后台执行,使其不占用终端。可以通过fg命令来放到前台执行。相关的命令fg、bg、kill等

linux jobs

阅读数 246

jobs 命令

阅读数 1584

linux kill bg jobs

阅读数 506