参考资料
handle_file.sh
#!/bin/bash
echo "文件复制开始..."
# 使脚本睡眠10秒中,模拟文件复制耗时操作...
sleep 120
echo "文件复制结束..."
nohup
命令可以确保即使终端会话结束,输入的命令也能够持续运行。
常见的应用场景包括长时间运行的任务,如备份、数据处理等。
例如当我们执行一个备份命令需要花费10个小时,我们不需要一直守在电脑上等待备份完成,完全可以在终端上执行完命令之后,直接关掉终端做别的时候,然后第二天再来确认备份是否完成。
nohup 命令 [参数] &
&
:表示将命令放在后台执行。> result.log
:将脚本的执行结果输出到result.log这个文件中2>&1
:是一个整体,>
左右不能有空格,即将错误内容重定向输入到标准输出中去。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 &
ps -ef | grep "脚本名"
来查询在后台的状况nohup sh ./handle_file.sh > result.log 2>&1 < /dev/null &
⏹如果脚本执行之后很长时间还是没有执行完,可以通过kill命令杀死脚本线程,强制结束
语法
kill -9 要杀死的线程PID