后台linux运行命令的简单介绍

linux系统中挂起操作和强制结束操作(后台运行程序方法)在linux系统中有这两个命令 ctrl z和ctrl c 后台linux运行命令,这两个命令输入之后看起来结果差不多,实质是不同后台linux运行命令的 。
他们都有中断命令后台linux运行命令的效果,但是作用是不一样的 。
ctrl c是强制终止程序的执行并结束进程 。而ctrl z则只是中断任务的执行,但该任务并没有被结束 。
它只是在进程中维持挂起的状态,用户可以使用fg/bg命令来继续前台/后台执行该任务 。fg命令会重启
前台被中断的任务 , bg命令会把中断的任务放到后台执行 。
后台linux运行命令你也可以使用bg这样的方法让一个前台执行的任务切换到后台去执行 。
也可以使用fg这样的方法让一个后台执行的任务切换到前台去执行 。
还有一个最常用的方法是
在一行命令的最后输入,可以让这行命令放到后台去运行 。
使用jobs命令查看当前有多少后台程序在运行 。
linux后台任务执行在命令后面加上可实现后台运行 。使用示例后台linux运行命令:
但仅使用命令后台linux运行命令 , 当关闭控制台终端时后台linux运行命令,任务同样会被终止 。
nohup(no hang up)命令,即忽略SIGHUP信号 。nohup能保证关闭控制台终端时,任务不被终止:
关闭控制台终端后,通过ps查看,easeapi.sh 后台linux运行命令的父进程由终端进程变成了init进程,即使关闭终端,任务依然能保持运行 。nohup命令默认会在当前目录创建nohup.out文件存储输出信息 。如果要输出到指定文件则:
nohup命令虽然简单 , 但在一些情况下可能并不好用 。比如,想使用scp命令从需要验证的服务端下载文件时,直接使用nohup命令并不会出现验证交互 。这种情况下,推荐使用bg/fg命令 。
CtrlC 和 CtrlZ是linux中两种中断命令 , 但作用有不同 。CtrlC是强制中断进程,而CtrlZ则是暂停任务执行 。在终端中正常执行scp命令 , 输入账户密码后,使用CtrlZ暂停任务 。
jobs命令显示当前任务状态 。
可以看到任务已经暂停,任务编号为1 。
bg/fg将可将任务在前后台切换 。现在将任务切换到后台:
在通过jobs查看 , 任务状态已变成了running:
当关闭终端后,任务可能会被终止 。可使用disown命令忽略SIGHUP信号 。
Linux后台运行Python程序 第一种nohup命令来让程序在后台运行
括号内容表示可以将平时输出到控制台中的内容重定向到*.log这个文件中,这个是可选的,如果没有这个 , 则会默认输出到nohup.out文件中 。括号后面你的表示后台运行 。
举个例子:
第二种方法是写一个脚本,假设我们定义了一个脚本run.sh
#!/bin/bash 是指此脚本使用/bin/bash来解释执行下面的语句,其中cd是表示将当前目录跳到所要运行文件所在目录,然后python3文件名.py则表示运行***python文件 , 当写完该脚本后,执行以下命令来执行该脚本从而让程序在后台运行 。
通过 ps -ef|grep python3 命令可以查看后台运行的进程都有哪些
linux后台执行命令:和nohup的用法,确实很实用 当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件 。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨) 。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用 。
:当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上 实现后台运行 。例如:sh test.sh
适合在后台运行的命令有f i n d、费时的排序及一些s h e l l脚本 。在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等 。不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作 。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:
这样,所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中 。
PS:当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它 。(ps -ef | grep 进程号 或者 kill -9 进程号)
nohup:使用命令后 , 作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时) , 作业就会停止运行 。nohup命令可以在你退出帐户之后继续运行相应的进程 。nohup就是不挂起的意思( no hang up) 。该命令的一般形式为:
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中 , 除非另外指定了输出文件:
使用了nohup之后,很多人就这样不管了,其实这样有可能在当前账户非正常退出或者结束的时候 , 命令还是自己结束了 。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行 。
ctrlz :可以将一个正在前台执行的命令放到后台,并且处于暂停状态 。
Ctrl c :终止前台命令 。
jobs: 查看当前有多少在后台运行的命令 。jobs -l选项可显示所有任务的PID , jobs的状态可以是running, stopped, Terminated 。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识 。
21解析:
扩展链接:如何写高效的代码,和代码优化方法
linux系统下如何从后台启动进程?你得查看后台存在的进程 #jobs
#fg
#bg
两个命令是调入前台和后台的命令
在命令后面加上一个
比如:
rm -rf /tmp/
Linux 技巧:让进程在后台可靠运行的几种方法
WeiboGoogle 用电子邮件发送本页面
我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务,结果却由于网络的不稳定导致任务中途失败 。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子 , 您可以针对不同的场景选择不同的方式来处理这个问题 。
nohup/setsid/
场景:
如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢?
hangup 名称的来由
在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯 。当用户 logout 时,modem 就会挂断(hang up)电话 。同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程 。
解决方法:
我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程 。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号 , 要么让进程运行在新的会话里从而成为不属于此终端的子进程 。
1. nohup
nohup 无疑是我们首先想到的办法 。顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号 。让我们先来看一下 nohup 的帮助信息:
NOHUP(1)User CommandsNOHUP(1) NAMEnohup - run a command immune to hangups, with output to a non-tty SYNOPSISnohup COMMAND [ARG]...nohup OPTION DESCRIPTIONRun COMMAND, ignoring hangup signals.--help display this help and exit--versionoutput version information and exit
可见,nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中 。一般我们可在结尾加上""来将命令同时放入后台运行,也可用"filename 21"来更改缺省的重定向文件名 。
[root@pvcent107 ~]# nohup ping[1] 3059nohup: appending output to `nohup.out'[root@pvcent107 ~]# ps -ef |grep 3059root30599840 21:06 pts/300:00:00 ping30679840 21:06 pts/300:00:00 grep 3059[root@pvcent107 ~]#
2 。setsid
nohup 无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程 , 那么自然也就不会受到 HUP 信号的影响了 。setsid 就能帮助我们做到这一点 。让我们先来看一下 setsid 的帮助信息:
SETSID(8)Linux Programmer’s ManualSETSID(8) NAMEsetsid - run a program in a new session SYNOPSISsetsid program [ arg ... ] DESCRIPTIONsetsid runs a program in a new session.
可见 setsid 的使用也是非常方便的,也只需在要处理的命令前加上 setsid 即可 。
[root@pvcent107 ~]# setsid ping [root@pvcent107 ~]# ps -ef |grep3109410 07:28 ?00:00:00 ping31102 292170 07:29 pts/400:00:00 grep [root@pvcent107 ~]#
值得注意的是 , 上例中我们的进程 ID(PID)为31094,而它的父 ID(PPID)为1(即为 init 进程 ID),并不是当前终端的进程 ID 。请将此例与nohup 例中的父 ID 做比较 。
3 。
这里还有一个关于 subshell 的小技巧 。我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中,从而扩展出很多有趣的功能,我们现在要讨论的就是其中之一 。
当我们将""也放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过jobs来查看的 。让我们来看看为什么这样就能躲过 HUP 信号的影响吧 。
[root@pvcent107 ~]# (ping)[root@pvcent107 ~]# ps -ef |grep1627010 14:13 pts/400:00:00 ping16278 153620 14:13 pts/400:00:00 grep [root@pvcent107 ~]#
从上例中可以看出,新提交的进程的父 ID(PPID)为1(init 进程的 PID),并不是当前终端的进程 ID 。因此并不属于当前终端的子进程,从而也就不会受到当前终端的 HUP 信号的影响了 。
在Linux中,如何设置前、后台命令和程序的执行?命令后直接加,这个命令就在后台执行;
正在运行的命令,使用Ctrl z,就挂起;
jobs命令,可以现实后台,包括挂起的命令;
使用bg %作业号 就可以把挂起的命令在后台执行;
使用fg%作业号 就可以把后台命令调到前台 。
【后台linux运行命令的简单介绍】后台linux运行命令的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于、后台linux运行命令的信息别忘了在本站进行查找喔 。

    推荐阅读