`
xitong
  • 浏览: 6173069 次
文章分类
社区版块
存档分类
最新评论

Linux标准IO和后台运行程序的方法

 
阅读更多

相关知识

标准输入默认为键盘,也可以使用文件和管道(pipe |);

标准输入默认输出到终端(terminal),但是也可以重定向到文件、管道或后引号;

标准错误默认输出到终端,但是也可以重定向到文件中;

标准的输入、输出和错误在C中分别表示为STDIN、STDOUT、STDERR,也可以使用0,1,2来表示。

/dev/null空设备文件,也称为位桶(bit bucket),它可以看作是一个“黑洞”,等价于一个只写的文件,所有的写入内容都会永远的消失。

/dev/zero是一个输入设备,可以使用它来初始化文件(写入字符串0),它实际上产生连续不断的null流,主要用于创建一个指定长度的初始化空文件。

重定向到null设备文件

在shell中可能经常能看到>/dev/null 2>&1,分解这个组合为下面的五部分:

1:>表示重定向到那里;

2: /dev/null表示空设备文件

3: 2>表示重定向标准错误STDERR

4: &表示等同于的意思,2>&1表示标准错误的输出重定向到等同于标准输出

5: 1表示标准输出STDOUT,系统默认输出为1,所以>/dev/null等同于1>/dev/null。

其执行过程为:

1>/dev/null:首先将标准输出重定向到空设备文件,也就是不输出任何信息到终端(即不显示任何信息);

2>&1:然后标准错误输出重定向到标准输出上,因为之前已经重定向标准输出到空设备文件,此时标准错误也重定向到空设备文件中。

# command >file 2>file将产生的标准错误和标准输出送到file中,此时file会打开2次,STDOUT和STDERR会相互覆盖,使得两个管道FD1和FD2同时抢占file的管道。

# command >file 2>&1 功能与上面的一样,但是file只打开一次,也使用一个管道FD1。

从IO效率上说,前一条命令效率明显比后一条命令效率要低。此外,还有一个非常有用的重定向操作符“-”,示例如下:

# (cd /src/dir && tar cf - .) | (cd /dst/dir && tar xvfp -)

该命令是把/src/dir目录下所有文件通过压缩后,快速的全部移动到/dst/dir目录中。

下面还有几种不常见的用法:

n<&- 表示将n号输入关闭;

<&-表示关闭标准输入(键盘);

n>&-表示将n号输出关闭;

>&-表示将标准输出关闭。

注:清除日志文件内容命令# cat /dev/null > /var/log/messages

重定向

重定向符号为>,它的使用方法有下面一些:

l 1>2 表示把标准输出STDOUT重定向到文件2中;

l 1>&2 表示把标准输出STDOUT重定向到标准错误STDERR。

l command > log 表示将标准输出重定向到log文件中,标准错误输出到终端上;

l command > log 2>1 表示将标准输出重定向到log文件中,标准错误重定向到文件1中;

l command >log 2>&1 表示将标准输出重定向到log文件中,把标准错误重定向到标准输出上。

l command 2>/dev/null 表示把标准错误信息重定向到空设备文件;

l command >/dev/null 表示把标准输出重定向到空设备文件;

l command >/dev/null 2>&1 表示把标准错误和标准输出全部重定向到空设备;

nohup使用

nohup命令的作用是不挂断的运行命令,忽略掉所有SIGHUP(挂起)信号。如果你正在运行一个进程,并且希望在退出终端时候该进程不会结束,那么就使用nohup命令,该命令可以在退出终端或者关闭终端之后继续运行相应的进程。

l 在注销后在后台运行命令:

# nohup ./command &

l 在后台运行命令并且将标准输出重定向到文件:

# nohup ./command >filename &

在Linux和Unix中如果希望程序运行在后台,很多都是在程序结尾使用&让程序自动运行。

#/usr/local/mysql/bin/mysqld_safe --user=mysql &

但是如果很多程序并不像mysqld一样做成守护进程,可能只是个普通的程序而已,一般这种程序使用&结束,但是如果终端关闭后程序也会被关闭,但是为了能够让它运行在后台,那么可以使用nohup命令来实现。比如让test.py运行在后台,那么使用nohup命令如下:

# nohup python test.py &

提示:

# appending output to nohup.out

值得注意的是在使用nohup时会自动写入到nohup.out文件中,此时nohup.out文件会不断的增加,可以利用/dev/null来解决这个问题。

# nohup ./program >/dev/null 2>&1 &

上面的命令让program程序运行在后台,并且把标准输出和标准错误重定向到空设备上,不记录到nohup.out文件中。

如果希望停止使用nohup命令运行的进程,只能使用kill命令来结束。

使用jobs命令查看任务,使用fg %n来关闭后台运行程序,使用ps -ef | grep command可以来查看后台运行的程序。

注:Windows和Linux命令对比:

在Windows查看进程使用tasklist命令,Linux上使用ps –ef命令;

在Windows上杀进程使用taskkill命令,> taskkill /im command /t /f,Linux上使用killall。

在Windows上后台运行可以使用start命令,并指定/b选项后台执行 start /b command <argv> >file,Linux下在命令前面加nohup,后面加上&符号即可。

在Windows上显示文本内容可以使用type命令> type filename,在Linux下使用cat命令即可# cat filename。

Work for fun,Live for love!

分享到:
评论

相关推荐

    入门学习Linux常用必会60个命令实例详解doc/txt

    因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown命令,系统管理员会通知所有...

    【最新版】DevDocs-0.7.1.dmg【亲测可用】最好的快速,有条理和可搜索的界面中结合了多个API文档

    关闭窗口时,该应用程序将继续在后台,macOS上的扩展坞和Linux / Windows上的托盘中运行。右键单击停靠/托盘图标,然后选择退出以完全退出该应用程序。在macOS上,单击停靠图标以显示窗口。在Linux上,右键单击任务...

    os-shell:用 LEXYACC 编写的 Linux shell

    环境变量扩展别名支持和检查无限别名扩展IO重定向:stdout、stderr、stdin都可以重定向管道支持任意数量的管道如果需要,“&”支持在后台完成程序与“*”和“?”匹配的通配符人物将错误打印到 stderr,并附上问题...

    devdocs-desktop:Dev DevDocs.io的功能齐全的桌面应用程序

    关闭窗口后,该应用程序将继续在后台运行,在macOS的扩展坞和Linux / Windows的任务栏中。 右键单击停靠/托盘图标,然后选择退出以完全退出该应用程序。 在macOS上,单击停靠图标以显示窗口。 在Linux上,右键单击...

    管控孩子PC的相关程序

    如果后台运行的话,相关的msg接口,相关的获得前台进程接口,都有问题(这个是windows安全性的限制), 目前还在研究偷explorer.exe的token,然后用它token运行ChildGuard.py,但各种坑,还在趟 (OpenProcess,...

    一个进程池的服务器程序

    if (write_pid() ) //避免同时有多个该程序在运行 return -1; if (pipe(fd1) ) { perror("pipe failed"); exit(-1); } if (s_pipe(fd2) ) { perror("pipe failed"); exit(-1); } int port = atoi(argv...

    SIOChat:SIOChat 是一个使用 SIOSocket 的多房间聊天示例应用程序

    只要安装通过npm install socket.io要运行节点命令。 将server.js放在与node_module文件夹相同的目录中。 Just Run with node server (或者如果你想调试,你可以使用DEBUG*= node server ) ::attension:: 不要...

    python入门到高级全栈工程师培训 第3期 附课件代码

    02 jquery循环方法和attr,prop方法 03 jquery模态对话框与clone的应用 04 jqueryCSS操作之offsets,position以及scrolltop 05 jquery事件绑定与事件委托 06 jquery动画效果 07 jquery扩展与插件 08 jquery扩展补充 09...

    单点登录源码

    | └── zheng-ucenter-app -- 微信小程序后台 ├── zheng-api -- API接口总线系统 | ├── zheng-api-common -- api系统公共模块 | ├── zheng-api-rpc-api -- rpc接口包 | ├── zheng-api-rpc-service -- ...

    进程管理经典软件MFC

     mdm.exe 进程文件: mdm or mdm.exe 进程名称: Machine Debug Manager 描述: Debug除错管理用于调试应用程序和Microsoft Office中的Microsoft Script Editor脚本编辑器。 是否为系统进程: 是 (11)  mmtask.tsk ...

    大名鼎鼎SWFUpload- Flash+JS 上传

    相比于标准的HTML Form,SWFUpload的使用方式更像是AJAX程序,页面中的Form会和FLASH控制的文件上传单独处理。 入门 SWFUpload并不是拖放式的上传控件,它需要JavaScript和DOM的知识。一些可用的演示展示了它能够...

Global site tag (gtag.js) - Google Analytics