参考资料
- linux后台运行nohup命令的使用及2>&1字符详解
目录
- 前期准备
- 一. 基本语法
- 二. 执行时不指定日志文件
- 三. 执行后不想要日志文件
- 四. nohup命令的执行与kill
- 4.1 执行
- 4.2 kill
 
前期准备
📄handle_file.sh
#!/bin/bash
echo "文件复制开始..."
# 使脚本睡眠10秒中,模拟文件复制耗时操作...
sleep 120
echo "文件复制结束..."
一. 基本语法
nohup命令可以确保即使终端会话结束,输入的命令也能够持续运行。
 常见的应用场景包括长时间运行的任务,如备份、数据处理等。
例如当我们执行一个备份命令需要花费10个小时,我们不需要一直守在电脑上等待备份完成,完全可以在终端上执行完命令之后,直接关掉终端做别的时候,然后第二天再来确认备份是否完成。
nohup 命令 [参数] &
- &:表示将命令放在后台执行。
- > result.log:将脚本的执行结果输出到result.log这个文件中
- 2>&1:是一个整体,- >左右不能有空格,即将错误内容重定向输入到标准输出中去。
 相当于将handle_file.sh脚本执行过程中出现的错误输出到result.log文件中。- 0表示stdin标准输入,用户键盘输入的内容
- 1表示stdout标准输出,输出到显示屏的内容
- 2表示stderr标准错误,报错的内容
 
- /dev/null:此处的作用只是为了避免nohup: ignoring input这个提示消息被添加到result.log文件中,该消息的产生并不影响程序执行,该配置项加不加无所谓。
# 如果sh脚本有执行权限的执行方法
nohup ./handle_file.sh > result.log 2>&1 < /dev/null &
# 如果sh脚本没有执行权限的执行方法
nohup sh ./handle_file.sh > result.log 2>&1 < /dev/null &
二. 执行时不指定日志文件
- 若不指定具体的日志文件,默认会在当前所在路径下产生一个nohup.out文件用来存放执行过程中的日志。
nohup sh ./handle_file.sh &

三. 执行后不想要日志文件
- 若执行过程中不想要日志,可以把正常输出和错误都放到/dev/null中进行销毁
- /dev/null是一个特殊的设备文件,在 Linux 和类 Unix 系统中用于丢弃数据。
 当将输出重定向到- /dev/null时,数据实际上不会被写入到任何地方,而是被丢弃。
 因为- /dev/null文件不会保存数据,也不会产生任何输出。
nohup sh ./handle_file.sh > /dev/null 2>&1 &

四. nohup命令的执行与kill
4.1 执行
- 执行之后可以看到sh脚本的线程号,本案例中,线程号为 7051
- 执行之后还可以通过 ps -ef | grep "脚本名"来查询在后台的状况
- 因为我们在sh脚本中设置了线程睡眠,因此刚执行完之后,立马查看result.log内容只有一行
nohup sh ./handle_file.sh > result.log 2>&1 < /dev/null &

 
4.2 kill
⏹如果脚本执行之后很长时间还是没有执行完,可以通过kill命令杀死脚本线程,强制结束
语法
kill -9 要杀死的线程PID


![[VulnHub靶机渗透] WestWild 1.1](https://img-blog.csdnimg.cn/direct/7a7bc257524d4cd6aa5a5aebbf23b393.png)

















