导航:首页 > 编程语言 > phpkill进程

phpkill进程

发布时间:2023-06-07 01:49:49

linux 如何关闭正在执行的php脚本

1. 如果不是后台执行,直接ctrl+c 就终止执行
2. 如果是后台执行
首先执行:sudo ps -ef|grep php

再次执行:sudo kill -9 pid 或者 sudo kill -15 pid

pid 为ps命令查处的进程号。

② php如何开启一个进程去关闭另一个进程

执行 ps 命令,看进程号,然后 kill 掉,或者让另一个进程给这个进程号发送 SIGTERM 信号,这个进程就退出了

③ linux 下写 shell kill掉运行时间超过5分钟的PHP进程

可以的,能根据Cpu累积耗时杀掉程序。
相关进程名字要知道哈。
假设以php进程为名字。
p_name=php
while
true
do
sleep
3
#每3秒检查一次。
pro="$(ps
-A|grep
"$p_name"|head
-n1)"
time="$(echo
$pro|awk
'{
split($3,tab,/:/);
if
(tab[2]+tab[1]*60>=5)
{print
1}else{print
0}
}')"
#上面那句利用awk判断时间是不是大于5分钟。是则输出1,否则输出0.
pid="$(echo
$pro|awk
'{print
$1}')"
#如果为1
就杀掉那个进程。
if
[
$time
=
'1'
]
kill
-9
$pid
fi
done

④ php进程超时接口返回504错误分析

在一次接口测试中,发现返回的http 504 time out 的错误,然后查看了php-fpm的错误日志,发现了如下错误

从表现上看,是php进程超时导致的进程被kill了,那么这个超时时间以及kill的机制是跟哪些参数有关呢,这里系统这里一下。

Nginx服务一般因为php的错误或者超时会有两种错误码502 bad Gateway 或者 504 Gateway Time-out

一种情况是php产生了语法错误,比如循环调用、变量作用域错误、方法不存在等,如果开启错误日志输出的话,这种错误在php-fpm的错误日志中是可以看到调用栈信息的。

另外一种情况可能就是超时引起的php-fpm主动kill的情况,在php.ini和php.fpm中有两个配置项,用来管理php脚本的最大执行时间

当php脚本的执行时间超过这个时间时,PHP-FPM不只会终止脚本的执行,还会终止执行脚本的Worker进程。所以Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。

以顶部的错误为例,当报502错误是,nginx的errorlog中有如下日志,:

所以只需将这两项的值调大一些就可以让PHP脚本不会因为执行时间长而被终止了。request_terminate_timeout可以覆盖max_execution_time,

所以如果不想改全局的php.ini,那只改PHP-FPM的配置就可以了。

此外要注意的是Nginx的upstream模块中的max_fail和fail_timeout两项。这两个配置表示在fail_timeout事件内,如果fail的测试达到max_fail,那么在接下来的fail_timeout时间内,Nginx都会认为上游服务器挂掉了,都会返回502错误。

所以可以将max_fail调大一些,将fail_timeout调小一些。

PHP-FPM设置的脚本最大执行时间已经够长了,但执行耗时PHP脚本时,发现Nginx报错从502变为504了。这是为什么呢?

因为我们修改的只是PHP的配置,Nginx中也有关于与上游服务器通信超时时间的配置

以Nginx超时时间为90秒,PHP-FPM超时时间为300秒为例,报504 Gateway Timeout错误时的Nginx错误访问日志如下:

调高这三项的值(主要是read和send两项,默认不配置的话Nginx会将超时时间设为60秒)之后,504错误也解决了。

而且这三项配置可以配置在http、server级别,也可以配置在location级别。担心影响其他应用的话,就配置在自己应用的location中吧。

要注意的是factcgi_connect/read/send_timeout是对FastCGI生效的,而proxy_connect/read/send_timeout是对proxy_pass生效的。

参考链接: http://www.cnblogs.com/fei33423/p/8184098.html 感谢分享!

⑤ mac php-fpm刚杀死又启动

如果用的unix-like系统,可以用进程查看命令:
ps -ef | grep php-fpm

⑥ PHP 中怎样终止单个进程

<?php
exec("kill-9pid,$op,$status);
?>

把结果逐行追加到$op的结尾处,只有指定了第二 个参数时,才可以用第三个参数,用来取得命令执行的状态码。$status 1 kill成功,0 是失败(一般情况下是无此进程)。


我的实际项目中是在执行的开始通过getmypid()获取进程id保存到数据库,如果crontab再次触发则把之前的进程kill掉再重新执行一遍以上代码。


希望能帮到你。

⑦ 执行php.exe程序cli提示错误如何解决

#!/usr/local/bin/php –q
<?php
//Windows平台上,上行应该为:#!C:\php\php.exe -q
echo "你好 PHP CLI!";
?>
不要忘了给该文件设置为可执行的权限:
$ chmod 755 myfile.php
然后直接输入以下命令,按回车键即可以运行:
$ ./myfile.php
如果要在Windows系统下运行该脚本,则不需要设置文件属性,
可以直接运行该脚本。
Microsoft Windows [版本 6.0.6000]
版权所有 (C) 2006 Microsoft Corporation。保留所有权利。
C:\ >myfile.php
你好 PHP CLI!

再重申一次:如果在Windows平台,CLI脚本的第一行一定要写正确php.exe所在的位置,像这样(另外,如果要在CLI脚本中加注释语句,则要把注释写在PHP标签里面,因为CLI解释只认识第一行,不在PHP标签里认为是语法错误):

#!C:\php\php.exe -q

这样,可以看到在命令行下信息已经打印出来,证明该CLI脚本已经成功运行。

2.从命令行上读取参数
如果想从命令行获取参数,CLI可以从$_SERVER['argc']和$_SERVER['argv'']取得参数的个数和值。我们再建立一个文件,名字为testargs.php,脚本代码如下:

#!C:\php\php.exe –q
<?php
//UNIX和Linux平台下应该为#!/usr/local/bin/php –q
echo "测试获取参数:\n";
echo $_SERVER["argc"]."\n";
//显示传入的参数值,从索引1开始显示
echo $_SERVER["argv"][1]."\n";
echo $_SERVER["argv"][2]."\n";
echo $_SERVER["argv"][3]."\n";
echo $_SERVER["argv"][4]."\n";
?>
在命令行输入如下代码:
C:\Users\John>testargs.php Always To Be Best
测试获取参数:
4
Always
To
Be
Best

因为我们输入了一串单词,为“Always To Be Best”,脚本参数以空格分隔。因此,PHP将其计为4个参数,下面对此说明。

$_SERVER["argc"]数组返回一个整型的数,代表从命令行上回车后一共输入了几个参数。

从上例的结果已经看出,要访问已经传入的参数值,需要从索引1开始。因为脚本本身的文件已经占用了索引0,即$_SERVER["argv"][0]。

3.处理I/O通道
PHP最初设计不是用于与用户直接的键盘输入或文本输出结合使用。了解这一设计是至关重要的,因为如果需要在命令行中执行任何操作,都必须能够与用户来回通信。

输入输出(I/O)通道这个思想来源于UNIX系统,UNIX系统提供3个文件句柄,用以从一个应用程序及用户终端发送和接收数据。

我们可以把一个脚本的输出重定向到一个文件:
php world.php > outputfile

如果是在UNIX系统下,也可以使用通道定向到另一个命令或应用程序中。例如:
php world.php | sort.

在PHP 5 CLI中,有一个文件流句柄,可以使用3个系统常量,分别为STDIN、STDOUT和STDERR。下面我们分别介绍。

(1)STDIN
STDIN全称为standard in或standard input,标准输入可以从终端取得任何数据。

格式:stdin (’php://stdin’)

下面的例子是显示用户输入:

#!/usr/local/bin/php -q
<?php
$file = file_get_contents("php://stdin", "r");
echo $file;
?>

这段代码的工作原理与cat命令很相似,回转提供给它的所有输入。但是,这时它还不能接收参数。

STDIN是PHP的标准输入设备,利用它,CLI PHP脚本可以做更多的事情。如下面例子:

#!/usr/local/bin/php -q
<?php
//UNIX平台下第一行应该为#!/usr/bin/php –q
/* 如果STDIN未定义,将新定义一个STDIN输入流 */
if(!defined("STDIN")) {
define("STDIN", fopen('php://stdin','r'))
}
echo "你好!你叫什么名字(请输入):\n";
$strName = fread(STDIN, 100); //从一个新行读入80个字符
echo '欢迎你'.$strName."\n";
?>
该脚本执行后将显示:
你好!你叫什么名字(请输入):
比如,输入Raymond之后,将显示:
欢迎你Raymond

(2)STDOUT
STDOUT全称为standard out或standard output,标准输出可以直接输出到屏幕(也可以输出到其他程序,使用STDIN取得),如果在PHP CLI模式里使用print或echo语句,则这些数据将发送到STDOUT。

格式:stdout (’php://stdout’)

我们还可以使用PHP函数进行数据流输出。如下面例子:

#!/usr/local/bin/php –q
<?php
$STDOUT = fopen('php://stdout', 'w');
fwrite($STDOUT,"Hello World");
fclose($STDOUT);
?>
输出结果如下:
Hello World
例如,echo和print命令打印到标准输出。
#!/usr/local/bin/php –q
Output #1.
<?php
echo "Output #2.";
print "Output #3."
?>
这将得到:
Output #1.
Output #2.Output #3.

说明:PHP标记外的新行已被输出,但是echo命令或print命令中没有指示换行。事实上,命令提示符重新出现在Output #2.Output #3. 所在的行中。PHP拥有的任何其他打印函数将会像此函数一样运行正常,任何写回文件的函数也是一样的。

#!/usr/local/bin/php -q
<?php
$STDOUT = fopen("php://stdout", "w");
fwrite($STDOUT, "Output #1.");
fclose($STDOUT);
?>

以上代码将把php://stdout作为输出通道显式打开,并且php://output通常以与php://stdout相同的方法运行。

(3)STDERR
STDERR全称为standard error,在默认情况下会直接发送至用户终端,当使用STDIN文件句柄从其他应用程序没有读取到数据时会生成一个“stdin.stderr”。

格式:stderr (’php://stderr’)

下面的脚本表示如何把一行文本输出到错误流中。

#!/usr/local/bin/php –q
<?php
$STDERR = fopen('php://stderr', 'w');
fwrite($STDERR,"There was an Error");
fclose($STDERR);
?>

PHP 5.2可以直接使用STDOUT作为常量,而不是定义上面使用的变量$STDOUT,为了兼容之前版本,我们仍使用了自定义变量,如果您使用的是PHP 5.2,则可以参考STDIN的第二个例子。

4.后台运行CLI
如果正在运行一个进程,而且在退出账户时该进程还不会结束,即在系统后台或背景下运行,那么就可以使用nohup命令。该命令可以在退出账户之后继续运行相应的进程。

nohup在英文中就是不挂起的意思(no hang up)。该命令的一般形式为:
nohup –f scriptname.php &

使用nohup命令提交作业,在默认情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件。
nohup scriptname.php > log.txt &
这样,PHP CLI脚本执行后的结果将输出到log.txt中,我们可以使用tail命令查看该内容:
tail -n50 -f log.txt

现在再来实现两个例子,第一个是每隔10分钟自动生成一个静态HTML文件,并一直执行下去。脚本代码如下:

#! /usr/local/bin/php
<?php
set_time_limit(0);
while(true){
@fopen("/usr/local/www/data-dist/content/
article_".time().".html","w");
sleep(600);
}
?>

保存并且退出vi编辑器,然后赋予genHTML.php文件可执行权限:

#>chmod 755 genHTML.php
然后让脚本在后台执行,执行如下命令:
$nohup genHTML.php –f &
执行上述命令后出现如下提示:
[1] 16623

按回车键后将出现shell提示符。上面的提示就是说,所有命令执行的输出信息都会放到nohup.out文件中。

执行上面命令后,每隔10分钟就会在指定的目录生成指定的HTML文件,如article_111990120.html等文件。

如何终止CLI程序的后台运行呢?

可以使用kill命令来终止这个进程,终止进程之前要知道进程的PID号,即进程ID,我们使用ps命令:

www# ps
PID TT STAT TIME COMMAND
561 v0 Is+ 0:00.00 /usr/libexec/getty Pc ttyv0
562 v1 Is+ 0:00.00 /usr/libexec/getty Pc ttyv1
563 v2 Is+ 0:00.00 /usr/libexec/getty Pc ttyv2
564 v3 Is+ 0:00.00 /usr/libexec/getty Pc ttyv3
565 v4 Is+ 0:00.00 /usr/libexec/getty Pc ttyv4
566 v5 Is+ 0:00.00 /usr/libexec/getty Pc ttyv5
567 v6 Is+ 0:00.00 /usr/libexec/getty Pc ttyv6
568 v7 Is+ 0:00.00 /usr/libexec/getty Pc ttyv7
16180 p0 I 0:00.01 su
16181 p0 S 0:00.06 _su (csh)
16695 p0 R+ 0:00.00 ps
16623 p0 S 0:00.06 /usr/local/bin/php /usr/local/www/data/genHTML.php
已经看到PHP的进程ID是:16623,于是再执行kill命令:
$ kill -9 16623
[1]+ Killed nohup /usr/local/www/data/genHTML.php
这时该命令的进程就已经被终止了,再使用ps命令:
$ ps
PID TT STAT TIME COMMAND
82374 p3 Ss 0:00.17 -bash (bash)
82535 p3 R+ 0:00.00 ps

刚才的PHP CLI脚本已经没有了,如果直接运行ps命令无法看到进程,那么就结合使用ps & apos两个命令来查看。

注意:上面例子必须运行在UNIX或者Linux系统中,如FreeBSD、Redhat Linux等,在Windows环境不支持nohup命令。

阅读全文

与phpkill进程相关的资料

热点内容
激光剑电影 浏览:920
华为招聘程序员 浏览:879
注册表扫描命令 浏览:219
中国老电影演员全部名单 浏览:942
用服务器ip地址访问 浏览:8
文登银河电影院今日放映表 浏览:82
学习板和单片机烧录器的区别 浏览:334
米思齐怎么编程顺序控制 浏览:807
linux磁盘规划 浏览:266
途观安卓大屏如何投屏 浏览:281
无声电影出现的时间 浏览:181
电信的app开票金额在哪里看 浏览:817
程序员薪资占比重图表 浏览:912
女主叫姜 浏览:314
催眠控制芯片bl 浏览:946
pdf复制后乱码 浏览:869
检测无法连接到加密锁授权服务器 浏览:532
新建文件夹2星空 浏览:581
同性恋激情电影 浏览:435
手机怎么访问自己搭建的服务器地址 浏览:361