文章目录
- 一. 什么是进程?
- 二. 进程后台运行
在了解三种进程后台运行的方式前,小编觉得有必要先简单讲解一下什么是进程。
PS: 本篇博客技术参考价值不大,只是类似随笔比较水,详细的知识点可以关注一下nohup命令的使用。
一. 什么是进程?
什么是进程?进程就是运行的程序。
例如我们在Windows系统中双击一个图标运行一个软件,其实这就是启动了若干了进程,只不过在Linux中是通过命令来操作程序的运行。
因此我们也可以对程序进行操作,列如运行程序,终止程序,查看程序的运行状态等。
那么我们如何产生1个进程呢?我们通常使用命令,命令对应程序,程序执行后就会产生相应的进程。
我们也可以把进程分为前台运行的进程
和后台运行的进程
,列如在Linux中:
这些都是在前台中运行的进程,会在终端中占用终端的输入或者产生信息。
ls
pwd
sleep 1000
我们可以在命令后面添加一个&符号让进程在后台执行列如:
sleep 1000 &
这样运行的命令是不会占用终端或者在终端中输出信息的,也就是后台运行一个进程,对于每一个进程都有一个固定的pid,那么如何查看进程的pid呢?
这就涉及到了进程信息的查看,我们就需要借助 ps 命令,列如:
# 利用运行进程使用的命令中的关键字查询出进程的 pid
ps -ef | grep <keyword>
# 查看当前用户运行的全部进程
ps -ux
查询出来的信息一般第二列就是进程的pid了
我们也可以通过命令将对应pid的进程杀死:
// 使用 kill 命令来杀死进程
kill -9 <pid>
kill -15 <pid>
9 和 15 这两个数字的含义可以在终端输入 htop,然后按 F9 查看,每个数字对应了一种发送给进程的信号。
15 对应的是 SIGTERM,通知进程结束,不加参数时,如:kill pid 默认使用该信号终止进程。
9 对应的是 SIGKILL,强制终止进程。
所以我们也可以在 htop 界面中发送相应的信号来结束进程。
关于进程的介绍,这里就不过于详细的讲解了,有感兴趣的读者朋友可以找一些相关文章查阅。
二. 进程后台运行
命令开启进程后台运行的方式有三种:
- 第一种方式是在执行的命令后面添加 & 符号
- 第二种是利用 ctrl + z 和 bg 搭配
- 第三种是使用 nohup 的方式后台运行进程(常用)
第一种:
sleep 10086 &
第二种:
sleep 10010
# 按 ctrl + z
# 在终端输入 bg
bg
第三种:
nohup sleep 1111 &
我们也可以使用下面的命令来查看后台运行的进程:
jobs -l
可以根据后台运行的进程编号将对应的进程转到前台来运行,编号可通过 jobs -l 命令查看
// 将 1 号后台运行的进程转到前台运行
fg 1
// 不指定编号,默认将编号最大的进程转到前台运行
fg
值得注意的是
: 使用上文中的方式 1 和方式 2 运行的后台进程会在终端关闭后被杀死,而使用 nohup 运行的后台进程在终端关闭后而主机还在运行的情况下继续运行。
在让进程后台运行时,我们通常需要记录日志,用于了解进程的运行情况,比如运行 jupyter notebook 时,我们通常将日志输入到文件中:
nohup jupyter notebook 1>jupyter.log 2>&1 &
这里的 2 表示的是错误输出,1 表示的是标准输出,标准输出会输出到终端。上述的 2>&1 会将标准错误输出重定向标准输出(终端),1>jupyter.log会将标准输出中的内容重定向到 jupyter.log 文件中,这样进程输出的日志信息就全都记录在 jupyter.log 文件中了,查看 jupyter.log 文件中的内容,就能知道进程的运行状态了。