zoukankan      html  css  js  c++  java
  • Linux进程和任务管理

    process 进程

    进程-线程等

    Job

    前台--后台:
        后台任务"与"前台任务"的本质区别只有一个:是否继承标准输入
    联机--脱机 -以及crontab
        脱机管理主要是针对终端异常断开的情形。     脱机工作:离线后台运行
        通常使用nohup命令来使得脱机或注销之后,Job依旧可以继续运行。也就是说nohup忽略所有挂断(SIGHUP)信号
        00. 无论是前台作业还是后台作业,两者都来自当前的shell,是当前shell的子程序。
                   下面是两者的定义。
                   前台作业:可以由用户参与交互及控制的作业我们称之为前台作业。
                   后台作业:在内存可以自运行的作业,用户无法参与交互以及使用[ctrl]+c来终止,只能通过bg或fg来调用该作业。
                    a、  command &  直接让作业进入后台运行
                   b、   [ctrl]+z   将当前作业切换到后台
                   c、   jobs       查看后台作业状态
                   d、   fg %n      让后台运行的作业n切换到前台来
                   d、   bg %n      让指定的作业n在后台运行
                   e、   kill %n    移除指定的作业n
                        "n" 为jobs命令查看到的job编号,不是进程id。
                   每一个job会有一个对应的job编号,编号在当前的终端从1开始分配。
    01. crontab命令被用来提交和管理用户的需要周期性执行的任务。crond的概念和crontab是不可分割的。crontab是一个命令,
         常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。
         该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。而crond正是它的守护进程。
            Linux下的任务调度分为两类:系统任务调度和用户任务调度
                在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件
            所有用户定义的crontab文件都被保存在/var/spool/cron目录中
     02.crontab文件
            crontab支持两种状态:
                a.直接编写计划任务;
                b.使用目录的方式,放在目录里面的都会定时执行,定时目录可在/etc/crontab中设定
                    第一步:写cron脚本文件,命名为crontest.cron。
                                        15,30,45,59 * * * *    echo "xgmtest....." >> xgmtest.txt  表示,每隔15分钟,执行打印一次命令 
                    第二步:添加定时任务。
                                    执行命令 “crontab crontest.cron”
                    第三步:"crontab -l" 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本
    
                                解释:
                                    *             *          *           *           *    /bin/sh /scripts/yy.sh
                                    分            时      日           月            周    命令和文件路径
                                    (00-59)  (0-23)  (1-31)  (1-12)   (0-6)
                                所用符号表示意思
                                        * 星号每的意思
                                            - 减号连续一段时间,如:00 17-19 * * * cmd  每天下午17点,18点,19点执行一次命令
                                            , 逗号多个时间段,如:00 10-11,17-19 * * * cmd 每天的上午10,11点整,下午的17,18,19点整执行一次命令
                                            /n n代表数字,指每隔n时间执行一次,如: */2 * * * * cmd 每隔2分钟执行一次命令
         注意事项:
            创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,
            这种情况一般是由于在crontab文件中没有配置环境变量引起的。在 crontab文件中定义多个调度任务时,
            需要特别注意的一个问题就是环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程 序当然能找到环境变量,
            而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这 样,系统执行任务调度时就没有问题了。
            不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,
            除了一些自动设置的全局变量。所以注意如下:               
                1)脚本中涉及文件路径时写全局路径;              
                2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:               
                cat start_cbp.sh                
                #!/bin/sh               
                source /etc/profile             
                export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf             
                /usr/local/jboss-4.0.5/bin/run.sh -c mev &
            新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行
        仅仅执行一次 at   守护进程 atd
            用户准备退出 session
            系统向该 session 发出SIGHUP信号
            session 将SIGHUP信号发给所有子进程
            子进程收到SIGHUP信号后,自动退出
            上面的流程解释了,为什么"前台任务"会随着 session 的退出而退出:因为它收到了SIGHUP信号。
            那么,"后台任务"是否也会收到SIGHUP信号?
            这由 Shell 的huponexit参数决定的。
            $ shopt | grep huponexit
            执行上面的命令,就会看到huponexit参数的值 大多数Linux系统,这个参数默认关闭(off)。因此,session 退出的时候,不会把SIGHUP信号发给"后台任务"
    

    守护进程

    daemon  守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务
            一般在命名后面会加一个d,表示守护进程
                1.service命令是Redhat Linux兼容的发行版中用来控制系统服务的实用工具,
                    它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
                     centos
                启动某个独立的守护程序服务的方式
                2.etc/init.d/syslog start
                    建议大家将service命令
                    替换为/etc/init.d/mysqld stop(因为有一些linux的版本不支持service)
    

    进程

    1.进程分类
        01.守护进程
            前台进程
            后台进程
        02.父进程
            子进程
        03.系统进程
            用户进程
    2.进程状态
        基本状态
                就绪状态
                运行状态
                阻塞状态
        转换过程
                就绪状态---> 运行状态-                        
                运行状态---->阻塞状态
                运行状态--->就绪状态
                阻塞状态---> 就绪状态               <唤醒>
    3.进程的查看
        ps
        pstree
        top
    4.进程的组成
        程序
        数据
        进程控制块(PCB) 
                包含<标志信息、说明信息、现场信息、管理信息>
                结构: 线性  索引 链式
        5.进程控制
    
    相关内容    :
        作业控制
  • 相关阅读:
    自动提示效果
    INF文件格式小结
    XP下IIS不能添加扩展名映射的BUG
    自动配置IE代理脚本
    基于多源数据画像的失败用例智能分析
    Hadoop中mapreduce作业日志是如何生成的
    从内存管理原理,窥探OS内存管理机制
    【伙伴故事】智慧厨电接入华为云+HarmonyOS,你的未来厨房长这样
    5步带你掌握工作流Activiti框架的使用
    华为云VSS漏洞扫描服务之开源组件漏洞检测能力
  • 原文地址:https://www.cnblogs.com/xzlive/p/10280546.html
Copyright © 2011-2022 走看看