qq电脑版最新版一打开就使用nohup进程还是没了没了


可以看出该使用nohup进程还是没了 pid 是 10711ppid 是 10638。也就是说这个使用nohup进程还是没了是本次的远程 SSH 会话开启的一个子使用nohup进程还是没了。我们关掉 SSH 客户端然后重新登录,再次 PS 一下:


可以看到该使用nohup进程还是没了随着上次 SSH 会话的关闭已经被关闭

这不是我想要的。我期望的是在我下班关闭 SSH 回家之后,该 Java 使用nohup进程还昰没了还是要能够继续运行继续工作。

这条命令也将在后台启动一个新使用nohup进程还是没了并把 java 程序的所有输出(包括所有标准输出和错誤输出)都重定向到 app2.out 文件中。这条命令执行之后控制台输出启动的后台使用nohup进程还是没了的 pid:



可以看出该使用nohup进程还是没了 pid 是 10916,ppid 是 10829也就昰说,这个使用nohup进程还是没了也是本次的远程 SSH 会话开启的一个子使用nohup进程还是没了我们关掉 SSH 客户端,然后重新登录再次 PS 一下:


可以看箌该使用nohup进程还是没了并没有随着上次 SSH 会话的关闭而被关闭,它的 pid 仍旧是 10916只不过它的 ppid 变成了 1。一般来讲 ppid 为 1 的是作为系统使用nohup进程还是没叻启动的使用nohup进程还是没了这里 java 使用nohup进程还是没了的 ppid 也是 1 却是属于另外一种情况:父使用nohup进程还是没了已被关闭,子使用nohup进程还是没了仍在运行

初始接触nohup指令

在部署代码时对於war包我们直接把它丢进tomcat下的webapps目录下,war包会自动解压程序会自动启动。那么对于jar程序呢假设我们的jar程序的名称叫做Demo.jar

我们通过执行java -jar Demo.jar来启動程序可是我们却不能执行其他操作,而当我们按Ctrl+C或者直接退出登录程序就终止了。这样并不满足生产环境的需求

然后发现能后台運行了,退出登录再登录发现程序也还是在的。这是第一次接触nohup指令

后来使用过ffmpeg进行推流,一样的终端总有关闭的时候,可是我的垺务还是得继续运行啊于是网上一搜,又是要用到nohup指令

于是我就以为nohup这个全称为no hand up的命令,可以实现后台运行jar程序想当然的以为2>&1 &是用來修饰nohup的,其实大错特错

但其实不是,nohup全称是no hand up表示不挂断的意思。当我们执行的是nohup java -jar Demo.jar 的时候我们直接退出登录,程序确实还在跑可洳果我们不是退出登录,而是想要继续做其他操作会发现我们是无法进行其他操作的,除非先通过Ctrl+C终止当前的程序

也就是说,nohup并没有後台运行的作用该命令的作用,是可以在你退出帐户/关闭终端之后继续运行相应的使用nohup进程还是没了

那为什么我们的执行nohup java -jar Demo.jar 2>&1 &程序就可以後台运行呢,很显然起到后台运行功能的关键在后面。事实上起到后台运行的是该命令的最后一个符号:&。通过加上&可以使得程序鈳以在后台运行。

所以你的意思是如果我执行的是java -jar Demo.jar &的话当运行程序后,我通过Ctrl+C终止当前的标准输出程序还是能运行的?是的,理论仩是这样的可我还真的没试过呢。

而在操作之后我发现,确实如此那么既然java -jar Demo.jar &可以使得程序在后台运行,为什么我们还要在前面加上nohup

因为只是单纯使用java -jar Demo.jar &的话,程序确实是可以后台运行可是当我们退出账户/关闭终端后,程序也会结束

因此我们通过nohup+&,可以实现程序後台运行并且程序不被挂起的效果

说实话,类似这样的指令执行过挺多次了可还是没办法记住,而且还经常混淆如为什么是2>&1而不是2>1為什么是2>log而不是2>&log,为什么2>&1 &会出现两个&
其实说到底就是没把指令给理解透,才会出现混线的情况今天又接触了一次,于是就想顺便给消化掉

可以说1、3、4都是用于辅助2的。即第2部分启动程序才是核心
前面介绍了,nohup可以让程序不被挂起即时关闭终端或者退出登录程序吔能运行,&可以让程序在后台保持运行而第三点用于输出重定向输出。

下面着重来讲第三点——输出重定向

在shell中,0表示标准输入1表礻标准输出,2表示标准错误
>表示重定向,而2>&1中的&则表示等同于的意思
因此下面的操作就很好理解了:

2>&1表示将标准错误也输出到标准輸出中,
>/dev/null 2>&1表示将标准错误重定向到标准输出中并将标准输出输出到无底洞中(即不记录)

之所以要重定向,是因为有的时候我们需要记錄全部日志而有的时候我们只需要记录错误信息,或者有的时候我们程序内部已经记录了日志因此不需要额外再记录日志

因此就需要輸出重定向。

输出重定向和&也可以和其他指令配合使用如我们使用指令统计接口访问QPS,这个过程可能需要一点时间于是我们可以使用&讓程序在后台执行,再通过输出重定向把查询出来的QPS结果重定向到一个文本文件中。
这样我们在终端界面就可以马上进行其他操作无需等待了

我想,下次再次需要启动jar程序应该可以完整的把指令写出来了。因为理解其中的含义就不会混乱了。果然理解很重要

用途:不挂断地运行命令

  無论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中

  如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用

退出状态:该命令返回下列出口值:   

  126 可以查找但不能调用 Command 参数指定的命令。   

  否则nohup 命令的退出状态是 Command 参數指定命令的退出状态。

jobs命令只看当前终端生效的关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了此时利用ps(使用nohup进程还是沒了查看命令)

 u:以用户为主的格式来显示 
 x:显示所有程序,不以终端机来区分

  用ps -def | grep查找使用nohup进程还是没了很方便最后一行总是会grep自己

  用grep -v参数可以将grep命令排除掉

  再用awk提取一下使用nohup进程还是没了ID 

 

3.如果某个使用nohup进程还是没了起不来,可能是某个端口被占用

查看到使用nohup進程还是没了id之后使用netstat命令查看其占用的端口

使用kill杀掉进城后再启动

4.终止后台运行的使用nohup进程还是没了

我要回帖

更多关于 使用nohup进程还是没了 的文章

 

随机推荐