php cli 关闭,php cli 安全中断退出

Ctrl-C送SIGINT信号,默认进程会结束,但是进程自己可以重定义收到这个信号的行为。

Ctrl-Z送SIGSTOP信号,进程只是被停止,再送SIGCONT信号,进程继续运行,涉及到命令有jobs,fg,bg。

//使用ticks需要PHP 4.3.0以上版本

declare(ticks = 1);

//信号处理函数

function sig_handler($signo)

{

switch ($signo) {

case SIGTERM:

// 处理SIGTERM信号

exit;

break;

case SIGHUP:

//处理SIGHUP信号

break;

case SIGUSR1:

echo "Caught SIGUSR1...\n";

break;

default:

// 处理所有其他信号

}

}

echo "Installing signal handler...\n";

//安装信号处理器

pcntl_signal(SIGTERM, "sig_handler");

pcntl_signal(SIGHUP, "sig_handler");

pcntl_signal(SIGUSR1, "sig_handler");

// 或者在PHP 4.3.0以上版本可以使用对象方法

// pcntl_signal(SIGUSR1, array($obj, "do_something");

echo "Generating signal SIGTERM to self...\n";

//向当前进程发送SIGUSR1信号

posix_kill(posix_getpid(), SIGUSR1);

echo "Done\n";

针对你的问题的面向过程式示例代码,当然也可以采用面向对象方式:

function shutdown()

{

echo PHP_EOL.'shutdown'.PHP_EOL;

}

register_shutdown_function('shutdown');

//使用ticks需要PHP 4.3.0以上版本

declare(ticks = 1);

//信号处理函数

function sig_handler($signo)

{

switch ($signo) {

case SIGTERM:

// 处理kill

echo PHP_EOL.'kill';

exit;

break;

case SIGHUP:

//处理SIGHUP信号

break;

case SIGINT:

//处理ctrl+c

echo PHP_EOL.'ctrl+c';

exit;

break;

default:

// 处理所有其他信号

}

}

//安装信号处理器

pcntl_signal(SIGTERM, "sig_handler");

pcntl_signal(SIGHUP, "sig_handler");

pcntl_signal(SIGINT, "sig_handler");

while(true){

echo '.';

sleep(1);

}

以上例子当执行ctrl+c或者kill时会输出

....^C

ctrl+c

shutdown

.........

kill

shutdown

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值