Linux后台跑程序的方法总结

当使用ssh进行远程代码运行时,控制端电脑通常不能出现任何意外。然而,运行深度学习程序通常需要数小时或数天的时间,这意味着我们的IDE不能关闭。一旦出现非人为因素(如断电、断网或IDE卡死关闭),远程程序也会中断。因此,将程序灵活地运行在服务器上,不受控制端因素的影响至关重要。

使用 & 将命令放到后台运行

第一种方法是在命令行最后加&符号  command & 

# 执行文件
python ./test.py &
 
# 查看是否在后台运行
ps -ef|grep test
 
# 后台的程序 需要关闭时,需要kill命令停止
killall [程序名]

注意:这种方法,查看运行日志很不方便(不推荐) 

nohup 命令

nohup 命令允许程序在退出终端后继续运行。输出会默认写到 nohup.out 文件中,或者你可以指定一个输出文件:

nohup python -u test.py > test.log 2>&1 & 

参数说明:

 python test.py  python 运行test.py文件

 -u  :表程序不启用缓存,也就是把输出直接放到log中,没这个参数的话,log文件的生成会有延迟

 >  :test.log 将输出日志保存到这个log中

 2>1 :2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;

 2>&1 :&与1结合就代表标准输出了

 &  :代表该命令在后台执行

查看nohup的后台进程:

jobs

disown 命令

如果你已经启动了一个前台任务,可以将其移到后台并使其在你退出终端后继续运行

command
# 按下 Ctrl+Z 暂停任务,这会将任务置于后台并暂停状态
bg  
disown -h

举个例子

1. 启动一个前台任务  python myscript.py 

2. 暂停任务并放到后台,按下 Ctrl+Z 暂停任务,这会将任务置于后台并暂停状态。你会看到类似如下的输出:

[1]+  Stopped                 python myscript.py

然后,使用  bg  命令将任务在后台继续运行:

这会继续执行任务,并且不会占用前台终端。你会看到类似如下的输出:

[1]+ python myscript.py &

3. 使用 disown 移除作业

现在,使用 disown 命令将该作业从 shell 的作业列表中移除:

disown -h %1

这里的 %1 是作业号,如果你有多个作业,可以通过 jobs 命令查看作业列表,并确定正确的作业号。

disown 的选项

  • disown 默认情况下会从作业列表中移除指定的作业。
  • -h 选项会将作业标记为不发送 HUP 信号(挂起信号),即使终端关闭,作业也会继续运行。

检查后台任务

ps aux | grep myscript.py

screen或者tmux

screen 和 tmux 是两个强大的终端复用器,允许你在会话中运行多个程序,并且可以在会话断开后重新连接。

创建一个新的窗口:执行完命令后会新建一个空白窗口。需要运行的程序在该窗口运行即可

screen -S test

screen 为新建窗口指令,-S  test 设置窗口名称

Ctrl+a c :创建窗口
Ctrl+a w :窗口列表
Ctrl+a A :重命名窗口
Ctrl+a d : 分离当前 screen 会话(让它在后台继续运行)
screen -r : 重新连接已经分离的 screen 会话
screen -r id或窗口名称: 重新连接已经分离的 screen 会话
screen -ls : 查看当前所有的screen进程
Ctrl
+a n :下一个窗口 Ctrl+a p :上一个窗口 Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换 Ctrl+a K(大写) :关闭当前窗口,并且切换到下一个窗口 (当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态) exit :关闭当前窗口,并且切换到下一个窗口 (当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态) Ctrl+a d :退出当前终端,返回加载screen前的shell命令状态

使用 tmux:

tmux
command
# 按 Ctrl+B 然后按 D 分离会话

要重新连接会话:

tmux attach

 

posted @ 2023-12-04 17:06  凌逆战  阅读(712)  评论(0编辑  收藏  举报