精华内容
下载资源
问答
  • Linux任务控制的几个技巧:任务前后台的切换 Linux/Unix 区别于微软平台最大的优点就是真正的多用户,多任务。因此在任务管理上也别具特色的管理思想。我们知道,在 Windows 上面,我们要么让一个程序作为服务在...
    Linux任务控制的几个技巧:任务前后台的切换   <script src="http://blog.csdn.net/count.aspx?ID=547954&Type=Rank" type="text/javascript"></script> 
    
    Linux/Unix 区别于微软平台最大的优点就是真正的多用户,多任务。因此在任务管理上也有别具特色的管理思想。
    我们知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和 bg 命令,让你轻松调度正在运行的任务。

    假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,终止这个程序,然后可以看到系统提示:
    [1]+ Stopped /root/bin/rsync.sh
    然后我们可以把程序调度到后台执行:(bg 后面的数字为作业号)
    #bg 1
    [1]+ /root/bin/rsync.sh &
    用 jobs 命令查看正在运行的任务:
    #jobs
    [1]+ Running /root/bin/rsync.sh &
    如果想把它调回到前台运行,可以用
    #fg 1
    /root/bin/rsync.sh
    这样,你在控制台上就只能等待这个任务完成了。 
    展开全文
  • 我们知道,在 Windows 上面,我们要么让一程序作为服务在后台一直运行,要么停止这服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和 bg 命令,让你轻松调度正在运行的任务。假设你发现前台运行的一...
    Linux/Unix 区别于微软平台最大的优点就是真正的多用户,多任务。因此在任务管理上也有别具特色的管理思想。
    
    我们知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和 bg 命令,让你轻松调度正在运行的任务。

    假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,终止这个程序,然后可以看到系统提示:
    [1]+ Stopped /root/bin/rsync.sh
    然后我们可以把程序调度到后台执行:(bg 后面的数字为作业号)
    #bg 1
    [1]+ /root/bin/rsync.sh &
    用 jobs 命令查看正在运行的任务:
    #jobs
    [1]+ Running /root/bin/rsync.sh &
    如果想把它调回到前台运行,可以用
    #fg 1
    /root/bin/rsync.sh
    这样,你在控制台上就只能等待这个任务完成了。
    展开全文
  • 我们知道,在 Windows 上面,我们要么让一程序作为服务在后台一直运行,要么停止这服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和 bg 命令,让你轻松调度正在运行的任务。假设你发现前台运行的一...
    Linux/Unix 区别于微软平台最大的优点就是真正的多用户,多任务。因此在任务管理上也有别具特色的管理思想。
    
    我们知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和 bg 命令,让你轻松调度正在运行的任务。

    假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,终止这个程序,然后可以看到系统提示:
    [1]+ Stopped /root/bin/rsync.sh
    然后我们可以把程序调度到后台执行:(bg 后面的数字为作业号)
    #bg 1
    [1]+ /root/bin/rsync.sh &
    用 jobs 命令查看正在运行的任务:
    #jobs
    [1]+ Running /root/bin/rsync.sh &
    如果想把它调回到前台运行,可以用
    #fg 1
    /root/bin/rsync.sh
    这样,你在控制台上就只能等待这个任务完成了。
    展开全文
  • 进程组进程组是一组进程的集合,每进程都属于一进程组,每进程组进程组leader进程,进程组的ID(PGID)等于leader进程的ID。对大部分进程来说,它自己就是进程组的leader,并且进程组里面就只有它自己一...

    • 进程组

    进程组是一组进程的集合,每个进程都属于一个进程组,每个进程组有一个进程组leader进程进程组的ID(PGID)等于leader进程的ID。对大部分进程来说,它自己就是进程组的leader,并且进程组里面就只有它自己一个进程。

    可以通过将信号发送给一个进程组,使进程组中的所有进程都收到该信号。

    查看进程的细节


    PID为进程自身的ID,PGID为进程所在的进程组的ID, PPID为进程的父进程ID。从上面的结果,我们可以知道ps和cat都是bash的子进程。

    • session(也称为会话)

    一个或多个进程组可以构成一个会话 (session)。

    一个会话中有一个领导进程(session leader)。会话领导进程的PID是会话的SID(session ID)。会话中的每个进程组称为一个工作(job)。会话可以有一个进程组成为会话的前台工作(foreground),而其他的进程组是后台工作(background)。每个会话可以连接一个控制终端(也可以不连接)。

    会话的意义在于将多个工作囊括在一个终端,并取其中的一个工作作为前台,来直接接收该终端的输入输出以及终端信号。 其他工作在后台运行。当我们打开多个终端窗口时,实际上就创建了多个终端会话。每个会话都会有自己的前台工作和后台工作。工作组和会话机制在Linux的许多地方应用。

    eg.

    当用xshell连接到主机时,即创建了一个session。shell即是session的leader进程,随后shell里面运行的进程都将属于这个session,当shell退出后,该会话中的进程将退出。

    shell里面启动一个进程后,一般都会将该进程放到一个单独的进程组,然后该进程fork的所有进程都会属于该进程组,比如多进程的程序,它的所有进程都会属于同一个进程组,当在shell里面按下CTRL+C时,该程序的所有进程都会收到SIGINT而退出。

    • 前台任务

    前台任务是独占命令行窗口的任务,只有运行完了或者手动中止该任务,才能执行其他命令。shell中启动一个进程时,默认情况下,该进程是一个前台进程组的leader,可以收到用户的输入,并且可以将输出打印到终端,只有当该进程组退出后,shell才可以再响应用户的输入。

    • 后台任务

    与前台任务相对应,后台任务在运行的时候,并不需要与用户交互,它们通常在不打扰用户其它工作的时候默默地执行。使shell可以继续响应用户的输入
    后台任务继承当前会话的标准输出(stdout)和标准错误(stderr)。因此,后台任务的所有输出依然会同步地在命令行下显示。
    不再继承当前session的标准输入(stdin),你无法向这个任务输入指令了。如果它试图读取标准输入,就会暂停执行(halt)。

    可以看出,”后台任务”与”前台任务”的本质区别只有一个:是否继承标准输入。

    前台任务变后台任务

    • 启动时变为后台任务 
      只要在命令的后面加上 & ,启动的进程就会成为“后台进程”。但是后台程序的输出仍然会打印到终端,影响用户输入。可以通过yourcommand>log.out  &,将输出重定向到文件中。
    • 正在运行的“前台任务”变为后台任务 
      先 ctrl+z ,之后执行 bg 命令。相当于让最近一个暂停的“后台任务”继续执行。 

    CTRL+Z 和 CTRL+C的对比 
      CTRL+Z 和 CTRL+C 都是中断命令,但是他们的作用却不一样. CTRL+C 是强制中断程序的执行,而 CTRL+Z 的是将任务中断,但是此任务并没有结束,仍然在进程中,只是维持挂起的状态,用户可以使用 fg/bg 操作继续前台或后台的任务。

    对于后台运行的进程组,在shell里面体现为job的概念,即一个后台进程组就是一个job,可以通过jobs命令查看后台运行的进程组。也可以通过fg命令将后台进程组切换到前端,这样就可以继续接收用户的输入了。如下


    • 守护进程
    守护进程(daemon)是指在UNIX或其他多任务操作系统中在 后台执行 的电脑程序, 并不会接受电脑用户的直接操控 如果一个进程永远都是以后台方式启动,并且不能受到Shell退出影响而退出,一个正统的做法是将其创建为守护进程(daemon)。守护进程值得是系统长期运行的后台进程,类似Windows服务。守护进程信息通过ps –a无法查看到,需要用到–x参数,当使用这条命令的时候,往往还附上-j参数以查看作业控制信息,其中TPGID一栏为-1就是守护进程

    守护进程与后台进程

    后台进程的文件描述符是继承于父进程,例如shell,所以它也可以在当前终端下显示输出数据。但是daemon进程自己变成了进程组长,其文件描述符号和控制终端没有关联,是控制台无关的。

    基本上任何一个程序都可以后台运行,但守护进程是具有特殊要求的程序,比如要脱离自己的父进程,成为自己的会话组长等,这些要在代码中显式地写出来换句话说,守护进程肯定是后台进程,但反之不成立。 

    用户退出session之后,后台任务是否会继续执行是判定是否为“守护进程”的依据 
      session退出后,linux系统设计如下:

    session就是我们平常所说的终端窗口 

    1. 用户准备退出 session
    2. 系统向该 session 发出SIGHUP信号
    3. session 将SIGHUP信号发给所有子进程
    4. 子进程收到SIGHUP信号后,自动退出

    前台任务会随着session的退出而退出是因为它收到了SIGHUP信号。
    后台任务是否会受到SIGNUP信号,取决于shell的  huponexit  参数。可以通过  $ shopt | grep huponexit  查看该参数的值。

    大多数Linux系统,这个参数默认关闭(off)。因此,session退出的时候(exit??还是直接关闭。待验证),不会把SIGHUP信号发给”后台任务”,即此时的后台任务是守护进程,但这显然不够安全。

    更安全地创建守护进程: disown 命令 
      通过”后台任务”启动”守护进程”并不保险,因为有的系统的huponexit参数可能是打开的(on)状态。 更保险的方法是使用disown命令。disown命令可以将指定任务从”后台任务”列表(jobs命令的返回结果)之中移除。一个”后台任务”只要不在这个列表之中,session 就肯定不会向它发出SIGHUP信号。

    $ node server.js &
    $ disown

      执行上面的命令以后,server.js进程就被移出了”后台任务”列表。你可以执行jobs命令验证,输出结果里面,不会有这个进程。 
      但是,这样还存在问题。因为”后台任务”的标准 I/O 继承自当前 session,disown命令并没有改变这一点。一旦”后台任务”读写标准 I/O,就会发现它已经不存在了,所以就报错终止执行。 
      为了解决这个问题,需要对”后台任务”的标准 I/O 进行重定向。

    $ node server.js > stdout.txt 2> stderr.txt < /dev/null &
    $ disown

      上面这样执行,基本上就没有问题了。

    更简便地创建守护进程: nohup 命令 
    还有比disown更方便的命令,就是 nohup

    $ nohup node server.js &

    nohup命令对server.js进程做了三件事。
    1.阻止SIGHUP信号发到这个进程。 
    2.将stdin重定向到/dev/null,于是该进程不再能够接收任何输入,即使运行在前台。 
    3.重定向标准输出和标准错误到文件nohup.out(有时在文件中看不到输出,有可能是程序没有调用flush)
    4.调用exec启动指定的命令(nohup进程将会被新进程取代,但进程ID不变)

    从上面nohup干的事可以看出,通过nohup启动的程序有这些特点:

    1. nohup程序不负责将进程放到后台,这也是为什么我们经常在nohup命令后面要加上符号“&”的原因
    2. 由于stdin、stdout和stderr都被重定向了,nohup启动的程序不会读写tty
    3. nohup启动的进程本质上还是属于当前session的一个进程组,所以在当前shell里面可以通过jobs看到nohup启动的程序
    4. 当session leader退出后,该进程会收到SIGHUP信号,但由于nohup帮我们忽略了该信号,所以该进程不会退出
    5. 由于session leader已经退出,而nohup启动的进程属于该session,于是出现了一种情况,那就是通过nohup启动的这个进程组所在的session没有leader,这是一种特殊的情况,内核会帮我们处理这种特殊情况,这里就不再深入介绍

    shell中session的退出

    当session 中leader进程退出,将导致它所连接终端被hangup,这就意味着该会话结束。但是对于会话的结束,并不会意味着该会话的所以进程都结束。对于daemon进程,在会话中创建,但是不依赖于会话,是常驻在后台的进程。

    具体来说当终端hangup时候,内核对会话的leader进程发送SIGHUP信号,它收到SIGHUP信号后并不是马上退出,而是向它的子进程都各自发送一个SIGHUP,将他们都杀死后,自己才退出,但是如果当该leader进程主动退出,而导致的终端hangup那么就不会发送SIGHUP信号给子进程了。

    如果又想要某个进程称为常驻后台进程,不随session退出而退出,有下面几个方法:
    1. 避免shell发送SIGHUP信号: a. 主动调用exit,而不是直接断开终端;b. 两次fork,因为shell只给子进程发送SIGHUP信号,不给孙进程发送。
    2. 忽略SIGHUP信号:进程捕捉到该信号将该信号忽略就行了

    3. 通过setsid()系统调用,那么该调用进程将会退出该session而建立一个新的session。

    • stdin、stdout和stderr

    /dev/null 表示空设备文件

    stdin标准输入,文件标志符0

    stdout标准输出,文件标志符1

    stderr标准错误输出,文件标志符2

    总的来说,stdin,stdout和stderr还是和终端有密切关系,通常在生产环境时,会将这3个流重定向到其它文件。比如编写守护进程的时候,因为守护进程和终端无关,所以往往会将stdin,stdout和stderr重定向到/dev/null去

    • 2>&1解析
    1. 从command>/dev/null说起

    其实这条命令是一个缩写版,对于一个重定向命令,肯定是a > b这种形式,command > /dev/null相当于执行了command 1 > /dev/null。执行command产生了标准输出stdout(用1表示),重定向到/dev/null的设备文件中。

         2. command>a 2>a 与 command>a 2>&1的区别

    command>a 2>a,等价于command 1>a 2>a;command>a 2>&1,等价于command 1>a 2>&1。

    两者都可以理解为执行command产生的标准输入重定向到文件a中,标准错误也重定向到文件a中。但两者的区别在于command>a 2>&1只打开一次文件a,command>a 2>a会打开文件两次,并导致stdout被stderr覆盖。&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的a。从IO效率上来讲,command 1>a 2>&1比command 1>a 2>a的效率更高。

    ctrl+c会发出SIGINT信号,该信号是程序终止(interrupt)信号,用于通知前台进程组终止进程。

    终端关闭时,SIGHUP被发送给session首进程,进行响应进程的关闭。

    • ctrl-c, ctrl-z, ctrl-d
    ctrl-c: ( kill foreground process ) 发送 SIGINT 信号给前台进程组中的所有进程,强制终止程序的执行;
    ctrl-z: ( suspend foreground process ) 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程,而并非结束进程,用户可以使用使用fg/bg操作恢复执行前台或后台的进程。fg命令在前台恢复执行被挂起的进程,此时可以使用ctrl-z再次挂起该进程,bg命令在后台恢复执行被挂起的进程,而此时将无法使用ctrl-z再次挂起该进程;
     一个比较常用的功能:
        正在使用vi编辑一个文件时,需要执行shell命令查询一些需要的信息,可以使用ctrl-z挂起vi,等执行完shell命令后再使用fg恢复vi继续编辑你的文件(当然,也可以在vi中使用!command方式执行shell命令,但是没有该方法方便)。

    ctrl-d: ( Terminate input, or exit shell ) 一个特殊的二进制值,表示 EOF,作用相当于在终端中输入exit后回车;

    还有以下几个:
    ctrl-/    发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 core 文件
    ctrl-s   中断控制台输出
    ctrl-q   恢复控制台输出
    ctrl-l    清屏

    转自:

    https://segmentfault.com/a/1190000009152815

    https://blog.csdn.net/yanglovefeng/article/details/7872251

    https://blog.csdn.net/hust_sheng/article/details/50766752

    https://blog.csdn.net/mylizh/article/details/38385739

    展开全文
  • 如何创建Windows网络计划任务

    千次阅读 2010-03-01 01:19:00
    WINDOWS计划任务就是实现这功能的一好工具。 WINDOWS计划任务分为两种,一种是本地的计划任务(Task Schedule),该类任务我们可以在WINDOWS"控制面板"下的"计划任务"中利用"计划任务向导"进行创建。另一种就是...
  • 原文:...我们知道,在 Windows 上面,我们要么让一程序作为服务在后台一直运行,要么停止这服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和 bg
  •  如果问一非程序人员Windows最好的特色是什么,得到的答案应该是系统最吸引力的图标。无论是Windows98现在支持的通用串行总线(USB)还是WDM(看上去有点像一软件协会而不象普通的设备驱动体系结构的缩写),图标...
  • 我们知道,在 Windows 上面,我们要么让一程序作为服务在后台一直运行,要么停止这服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和 bg 命令,让你轻松调度正在运行的任务。 假设你发现前台运行...
  • 有时在我们编写的前台程序需要开机运行,当后台程序时可以注册服务方式进行启动(system权限),前台程序的启动需要等待用户登录到桌面后运行(涉及界面交互等),前台程序的启动主要有几种方式: 1. 写入启动项...
  • 我们知道,在 Windows 上面,我们要么让一程序作为服务在后台一直运行,要么停止这服务。而不能让程序在前台后台之间切换。 而 Linux 提供了 fg 和 bg 命令,让你轻松调度正在运行的任务。假设你发现前台运行的...
  • windows到*nix(三) 多任务

    万次阅读 2009-12-24 10:03:00
    我们知道windows是一任务操作系统,同时运行的任务可以任意切换,还有任务管理器,*nix也是。你一定不会满足一次只执行一程序,等待程序结束后再执行下一。下面我们来看看怎么做: 后台启动找一耗时比较...
  • 天,在荷兰的一DevDay上微软Windows Phone团队的Charlie Kindel(PARTNER GROUP PROGRAM MGR)在Tweakers.net的一访谈中对于Windows Phone 7提到了更多的内容:1. 对于Windows Phone的升级,以后不在像现在...
  • 对于一个Windows Phone程序来说,他启动---运行---休眠---墓碑---退出等5状态,状态切换之间存在一些事件和方法。下面就具体介绍一程序从启动到终止的过程。 1 启动一程序 我们启动一程序多种方法...
  • 参考文档:Win10下...由于 Redis 并没有官方支持 Windows, 下载方法1 https://github.com/MSOpenTech/redis 中下载 Redis 包。 下载方法2(我用的这,我下载的msi可安装的): https://github.com/Micros...
  • Windows下访问USB的种方式

    千次阅读 2018-03-21 22:42:38
    今天需求,要写一DEMO,在WIN10下监听LWin+F20、LWin+F19、LWin+F18.三快捷键。 之前写了DEMO,是通过修改注册表的方式,修改Iink工作区的启动对象,这种方法缺点是用户可以自己通过ink工作区修改启动...
  • Windows 10新功能

    千次阅读 2015-08-31 19:34:03
    Windows 10 中面向开发人员的新增功能 Windows 10 及新增的开发人员工具将提供新通用 Windows 平台支持的工具、功能和体验。在 Windows 10 上安装完工具和 SDK 后,你可以随时创建新的通用 ...
  • Windows7系统的70小技巧

    千次阅读 2010-07-14 15:49:00
    Windows 7比Vista要好,因为它很多新的功能。不幸的是其中的一些功能并不是很容易被人们所发现,所以我们把其中的一些最重要的技巧和窍门创建成一列表并 且一步一步的向大家进行介绍。 1. 电脑守卫 我很少让其他...
  • 于是我突然想起了大学时在光谷书城看到的一本书,讲的是微软的面试,翻了页就发现了作者在说这问题。当时我感觉这作者很牛B,因为对当时的水平还比较菜。后来就淡忘了。(当然我也没买那本书,没想到今后会...
  • 刚遇到这问题的时候,按照学过的算法优化基础,做了一些简单的计算优化,比如:把多次创建图片的地方改为共享同一图片,看看没有for循环的地方不必要的计算、或者多次文件读取。接下来在百度、谷歌搜索,...
  • Windows7的70使用技巧

    千次阅读 2009-08-18 18:05:00
    Windows7的70使用技巧以下为自己根据目前版本的使用情况进行了简单的翻译win7现在只有Beta版本, 但是他依然比最新版本的VISTA要好并且它很多新的新的功能。 不幸的是, 其中的一些功能并不是很容易被人们所发现...
  • 几个问题

    2008-10-27 19:05:00
    这样做可使调度更灵活,例如,允许某些后台任务比某些前台任务更重要,尽管在通常情况下,前台任务的优先级应该更高。使用实时优先级时要非常当心。如果你把一任务的优先级设得太高,也可能无法实现多任务执行功能...
  • Windows API函数大全(Windows编程参考手册)

    千次阅读 多人点赞 2020-12-10 15:50:58
    Windows API包括几千个可调用的函数,它们大致可以分为以下几个大类:基本服务、组件服务、用户界面服务、图形多媒体服务、消息和协作、网络、Web服务。
  • 前后台系统应用程序是一大循环,里面各个需要执行的任务,这部分可看成是后台系统;对于一些重要的实时性要求强的任务则放到中断函数中去执行,这部分就是前台系统。一般的应用不复杂的操作系统都会设计成前后台...
  • linux 常用几个命令

    千次阅读 2008-02-29 20:13:00
    linux与windows最大的区别就是真正的多用户,多任务,windows不可以实现让前后台互换的运行,而linux可以做到这一点 通过用命令 fg,bg来实现  & 命令 那我们为什么后台执行命令呢? 因为命令在后台运行的时候,...
  • 任务栏闪动

    千次阅读 2010-04-24 13:27:00
    (转) 大 中 小 [收藏本文] 如果您创建的应用程序是运行在Windows 98或更高版本操作系统上,您可以通过调用API函数FlashWindowEx并赋给它一FlashWInfo结构体来实现. 而如果是运行在Windows 95上则比较麻烦,但您也...
  • Windows 技巧集锦

    千次阅读 2007-12-16 22:31:00
    一 WinXP:解决任务栏假死 所谓假死就是任务栏停止相应,但用鼠标右键点击桌面却有效。...接着在语言栏设置对话框中关闭“在桌面上显示语言栏”,再选中“在‘通知’区域显示其他语言栏...二 减少磁盘扫描等待时间Windows
  • WINDOWS核心编程笔记(5-10)

    千次阅读 2005-12-10 12:43:00
    第6章线程的基础知识理解线程是非常关键的,因为每进程至少需要一线程。与进程内核对象一样,线程内核对象也拥有属性,本章要介绍许多用于查询和修改这些属性的函数。此外还要介绍可以在进程中创建和生成更多的...
  • 前台页面首页展示有任务标题,任务单价,任务编号,剩余数量,置顶到期时间 已做任务数量,所属的分类任务项目图标。 6.用户做任务页面要求:1.任务标题2.发布方,任务编号,任务单价,任务要求文字,验证审核...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,419
精华内容 8,167
关键字:

windows前台任务有几个