php cli 安全中断退出
一个phpcli小程序,用
while(1){
....
}
方式处理队列任务(主要是写入mysql一些日志), 求教如果控制台kill掉这个进程
怎么安全中断, 接受kill (或者 前台的 ctrl+z) 信号
处理完一个任务, 输出 byebye 再退出
谢谢
回复内容:
一个phpcli小程序,用
while(1){
....
}
方式处理队列任务(主要是写入mysql一些日志), 求教如果控制台kill掉这个进程
怎么安全中断, 接受kill (或者 前台的 ctrl+z) 信号
处理完一个任务, 输出 byebye 再退出
谢谢
若需要脚本终止时被调用,可以使用register_shutdown_function()或者__destruct(),但这个问题显然需要进程控制,信号处理器。
Ctrl-C送SIGINT信号,默认进程会结束,但是进程自己可以重定义收到这个信号的行为。
Ctrl-Z送SIGSTOP信号,进程只是被停止,再送SIGCONT信号,进程继续运行,涉及到命令有jobs,fg,bg。
参考进程控制扩展预定义常量,http://php.net/manual/zh/function.pcntl-signal.php给出一段代码,引用如下:
<code><?php //使用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"; </code></code>
针对你的问题的面向过程式示例代码,当然也可以采用面向对象方式:
<code><?php 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); } </code></code>
以上例子当执行ctrl+c或者kill时会输出
<code>➜ ....^C ctrl+c shutdown ➜ ......... kill shutdown </code>
ps -ef | grep php
会列出当前工作的脚本,看看那个路径对应的PID
然后Kill -9 {pid}
不知道还有没有更好的办法。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます
