进程运行与程序流
进程运行
程序运行有2种
前台运行
程序运行在当前的终端,所有的信息都输出到屏幕上,占用你的终端,你也无法继续使用;如果终端异常关闭,导致程序会自动退出
后台运行
不会占用你的终端,程序在系统后台跑着,你该干啥干啥,终端关了,程序也继续运行。后台运行命令
command & # 未启动的command放入后台去运行 jobs # 查看后台进程列表 ctrl + z # 暂停进程 bg 1 # 程序放入后台运行,和 & 一样 fg 1 # 将后台任务放入前台执行
nohup命令
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下 如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out 文件中。 一般和 & 后台符,结合使用。nohup不加&后台符的话还是前台运行
语法nohup command 选项 & Command:要执行的命令。 Arg:一些参数,可以指定输出文件。 &:让命令在后台执行,终端退出后命令仍旧执行。
理解linux的数据流
执行linux命令时,linux默认为用户进程提供了3种数据流
stdin 标准输入:0 一般是键盘输入数据 比如cat命令等待用户输入 stdout 标准输出:1 程序执行结果,输出到终端 stderr 标准错误输出:2 程序执行结果,输出到终端
标准输入 cat 接收键盘的输入数据,然后打印到终端,直到ctrl +d 结束输入 [root@yuchao-tx-server ~]# cat hello hello 标准输出 [root@yuchao-linux01 ~]# ls /opt/ HelloWorld.class HelloWorld.java jdk jdk1.8.0_221 jdk-8u221-linux-x64.tar.gz passwd 标准错误输出 [root@yuchao-linux01 ~]# ls /opppp > stderr.txt ls: cannot access /opppp: No such file or directory
输出重定向
输出重定向是指把命令(或可执行程序)的
标准输出
或标准错误输出
重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。
使用 “ > ”符号,将标准输出重定向到文件中。形式为:命令>文件名 使用“ >> ”符号,将标准输出结果追加到指定文件后面。形式为:命令>>文件名 使用“ 2> ”符号,将标准错误输出重定向到文件中。形式为:命令 2> 文件名 使用“ 2>> ”符号,将标准错误输出追加到指定文件后面。形式为:命令 2>>文件名 使用“ 2>&1 ”符号或“ &> ”符号,将把标准错误输出stderr重定向到标准输出stdout 使用“ >/dev/null ”符号,将命令执行结果重定向到空设备中,也就是不显示任何信息。
2>&1 解释
将stderr重定向到stdout,就可以防止程序运行出错,导致程序异常 写法1 [root@yuchao-tx-server ~]# echhhho '超哥带你学linux' &>> test.log 写法2 [root@yuchao-tx-server ~]# echhhho '超哥带你学linux' >> test.log 2>&1 (写法2使用的人更多) 黑洞文件,空设备文件,也同样遵循,stdout、stderr的语法 [root@yuchao-tx-server ~]# echo '超哥带你学linux' &>> /dev/null [root@yuchao-tx-server ~]# echhhhho '超哥带你学linux' &>> /dev/null