在 UNIX 和类 UNIX 操作系统(如 Linux 和 macOS)中,nohup 意图为后台运行且免疫挂断信号的命令,用于在用户注销(logout)或终端关闭后继续运行相应的进程。
基本语法
启动进程
shell
nohup [COMMAND] [ARG...] &
COMMAND
是你想要在后台运行的命令。[ARG...]
是传递给该命令的参数(如果有的话)。&
符号将命令置于后台执行。
结束进程
获取进程的pid
shell
ps aux | grep train.sh
或
ps -ef | grep python
然后用以下命令杀死对应的进程:
shell
kill -9 pid
示例
简单示例
假设你想要在后台运行一个 Python 脚本 myscript.py,即使你关闭了终端或注销了账户,该脚本也会继续运行。
shell
nohup python3 myscript.py &
重定向输出
你可以通过重定向操作符来自定义输出文件。
shell
nohup python3 myscript.py > myoutput.log 2>&1 &
这会将标准输出重定向到 myoutput.log 文件,并将标准错误也重定向到同一个文件。
指定目录
使用 -d 选项可以指定输出文件的目录。
shell
nohup -d /path/to/directory python3 myscript.py &
这会将输出文件(默认为 nohup.out)保存到指定的目录中。
linux中的2>&1是什么意思
该命令中的数字解释如下:
- 0 -- stdin (standard input,标准输入)
- 1 -- stdout (standard output,标准输出)
- 2 -- stderr (standard error,标准错误输出)
在Linux中,2>&1
是一种重定向操作,用于处理命令的输出。这里,2代表标准错误(stderr),而1代表标准输出(stdout)。因此,2>&1的意思是将标准错误(stderr,文件描述符为2)重定向到标准输出(stdout,文件描述符为1)所指向的地方。
1、默认情况下:
- 标准输出(stdout)会打印到终端或文件(如果使用了>重定向)。
- 标准错误(stderr)也会打印到终端,但不会被>重定向影响。
2、使用 >
重定向标准输出:
shell
ls non_existent_file > output.txt
这个命令会尝试列出non_existent_file,但因为该文件不存在,所以会产生一个错误消息。这个错误消息(stderr)会打印到终端,而标准输出(如果有的话)会被重定向到output.txt文件中。
3、使用 2>&1
重定向标准错误:
shell
ls non_existent_file > output.txt 2>&1
这次,标准输出和标准错误都会被重定向到output.txt文件中。>重定向了标准输出到output.txt,而2>&1将标准错误重定向到标准输出当前所指向的地方(在这个例子中,是output.txt)。
4、另一种写法:
shell
ls non_existent_file &> output.txt
这是Bash 4.0及以上版本支持的一种简写方式,它的效果与ls non_existent_file > output.txt 2>&1相同,即将标准输出和标准错误都重定向到output.txt。
效果和3一样