本文通过以下代码a.php来说明这几个命令的使用方法
<?php
for($i=1;$i<50;$i++){
sleep(1);
echo $i.' ';
}
首先说明下&
&表示后台在后台执行
[tianle@localhost ~]$ php a.php &
[1] 3255
[tianle@localhost ~]
2>&1
我们经常会遇到这样的命令,2是标准错误,1是标准输出,0标准输入。这样的命令相当与把标准错误重定向到标准输出。可能还会疑惑&1的问题
其实我们更多遇到这样的命令是这样的
command>a 2>&1 &
这个命令等价与 command 1>a 2>&1 &
这个命令的意思可以分成三步解释:
1、command 1>a 将command产生的标准输出重定向到a文件中
2、2>&1 表示将错误信息也重定向到a文件
3、最后的&表示,命令在后台运行
ctrl+z
ctrl+c是强制中断任务的执行,使用ps查找不到中断的进程
ctrl+z是中断任务的执行,但是任务并没有被删除,相当于挂起,使用ps命令仍可看到该进程挂在后台,如果使用这个命令中断进程,最后要再执行kill -9 pid,来彻底删除进程
[tianle@localhost ~]$ php a.php
1 2 3 4 5 ^Z
[1]+ Stopped php a.php
[tianle@localhost ~]$ ps -ef |grep php
root 2195 1 0 05:29 ? 00:00:00 php-fpm: master process (/etc/php-fpm.conf)
apache 2196 2195 0 05:29 ? 00:00:00 php-fpm: pool www
apache 2197 2195 0 05:29 ? 00:00:00 php-fpm: pool www
apache 2198 2195 0 05:29 ? 00:00:00 php-fpm: pool www
apache 2199 2195 0 05:29 ? 00:00:00 php-fpm: pool www
apache 2200 2195 0 05:29 ? 00:00:00 php-fpm: pool www
tianle 3330 2899 0 06:27 pts/0 00:00:00 php a.php
tianle 3333 2899 0 06:27 pts/0 00:00:00 grep php
[tianle@localhost ~]$
jobs
jobs命令是显示正在后台运行的命令
[tianle@localhost ~]$ cp a.php b.php
[tianle@localhost ~]$ php a.php
1 2 3 ^Z
[1]+ Stopped php a.php
[tianle@localhost ~]$ php b.php
1 2 3 ^Z
[2]+ Stopped php b.php
[tianle@localhost ~]$ jobs
[1]- Stopped php a.php
[2]+ Stopped php b.php
[tianle@localhost ~]$
fg
将后台运行的命令调至前台执行 使用方法 fg num,num是通过jobs查询出来的命令序列号
[tianle@localhost ~]$ jobs
[1]- Stopped php a.php
[2]+ Stopped php b.php
[tianle@localhost ~]$ fg 1
php a.php
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 [tianle@localhost ~]$
bg
将后台的命令在后台执行,使用方法bg num,num是通过jobs查询出来的命令序列号
[tianle@localhost ~]$ jobs
[2]+ Stopped php b.php
[tianle@localhost ~]$ bg 2
[2]+ php b.php &
[tianle@localhost ~]$