PHP 開発のベテランとして。コマンドラインを使用して、nginx や PHP-FPM などの操作を開始/再起動/停止します。非常に感動。もしC/Cを使ってこのようなシステムを開発してくださいと言われたら、私には絶対にそんな気力はありません。しかし、Golang が私の視界に入って以来。すべてとても簡単だと思いました。
1) デーモン プロセスを生成する
コードに直接移動します:
package main import ( "os" "os/exec" "path/filepath" ) func main() { //判 断当其是否是子进程,当父进程return之后,子进程会被 系统1 号进程接管 if os.Getppid() != 1 { // 将命令行参数中执行文件路径转换成可用路径 filePath, _ := filepath.Abs(os.Args[0]) cmd := exec.Command(filePath, os.Args[1:]...) // 将其他命令传入生成出的进程 cmd.Stdin = os.Stdin // 给新进程设置文件描述符,可以重定向到文件中 cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Start() // 开始执行新进程,不等待新进程退出 return } }
Linux システムに詳しい人は知っておくべきです: ユーザーが作成したデーモン プロセスは、次のユーザーによって使用されます。 LinuxシステムのプロセスNo.1が引き継ぎます。つまり、上記のコードは Linux システムでのみ実行できます。私は Unix システムで遊んだことがありません。したがって、具体的な提案はできません。
インターネットで、デーモン プロセスを作成する他の方法があることを知りました。ただし、私にとって良いと思われるのは上記のソースコード方法だけです。プロジェクトでうまく使用されています。
例:
os.StartProcess() 创建守护进程。 syscall.RawSyscall() 创建守护进程。
exec.Command
のみがデーモン プロセスを作成する最も高度な方法です。最高のカプセル化。このテストを使用することをお勧めします。
2) デーモン プロセスの開始/再起動/停止
ポイント 1 では、デーモン プロセスが正常に開始されました。ただし、kill コマンドを使用して終了することはできません。その後、再度開始してください。したがって、業界の専門的なアプローチであるシグナルを使用する必要があります。
実行中のプロセスは、送信されたシグナルを受信できます。 Linux に関するシグナルは数多くあります。 Google でキーワード「Linux シグナル」を検索できます。
ソース コードに直接アクセスします:
package main import "fmt" import "os" import "os/signal" import "syscall" func main() { // Go signal notification works by sending `os.Signal` // values on a channel. We'll create a channel to // receive these notifications (we'll also make one to // notify us when the program can exit). sigs := make(chan os.Signal, 1) done := make(chan bool, 1) // `signal.Notify` registers the given channel to // receive notifications of the specified signals. signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) // This goroutine executes a blocking receive for // signals. When it gets one it'll print it out // and then notify the program that it can finish. go func() { sig := <p>重要なポイントは 3 つあります: <br>1) 信号の登録 <br>2) 信号の受信 <br>3) 信号の処理。 </p><p>デーモンプロセスの作成とセマフォ処理を統合すれば、デーモンプロセスを管理するコマンドを実装できます。 </p><p>golang 関連の技術記事をさらに詳しく知りたい場合は、<a href="https://www.php.cn/be/go/" target="_blank"><strong>golang</strong></a> チュートリアル列をご覧ください。 </p>
以上がGolang がどのようにデーモン プロセスを作成し、スムーズに再起動するかを分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

効果的なGOアプリケーションエラーログには、詳細とパフォーマンスのバランスをとる必要があります。 1)標準のログパッケージの使用は簡単ですが、コンテキストがありません。 2)Logrusは、構造化されたログとカスタムフィールドを提供します。 3)Zapはパフォーマンスと構造化されたログを組み合わせますが、より多くの設定が必要です。完全なエラーロギングシステムには、エラー濃縮、ログレベル、集中ロギング、パフォーマンスの考慮事項、エラー処理モードを含める必要があります。

emptyinterfacessoareinterfaceswithnometods、andingningundatatypes.1)asseeninthefmtpackage.2)usetheemcautiallydueTopoterisosofteTyaNDETYETYANDPERETINGISSUSES.2)

go'sconcurrencyModelisuniquedueToitsueToitsutinesAndChannels、sublicationalightweight andefcient andparedtototototheded based basedinlanguageslikejava、python、andrust.1)

go'sconcurrencymodelusesesgoroutinesandchannelstomeconconconconconconconconconconconconming effectivilly.1)GoroutinesArelightweightThreadSthatalloweasyparelizationoftasks.2)Channelsfacilateatesafedataexchangengengengengengedines、crucialforsynchruniz

インターフェースアンドポリマスを導入することは、codeReusablivedainability.1)defineinterfacesattherightabstractionlevel.2)useinterfacesfordependencyinjection.3)profilecodetAnageperformanceImpacts。

initistingorunsoutomativiviseativeatializepackages andsetuptheenvironment.it'susefulforstingupglobalvariables、resources、およびperformingone-tastasksacrossanypackage.hoer'showitworks:1)Itcanbeusedinpackage、not not-justhe、

インターフェイスの組み合わせは、関数を小さな焦点を絞ったインターフェイスに分解することにより、GOプログラミングで複雑な抽象化を構築します。 1)リーダー、ライター、およびより近いインターフェイスを定義します。 2)これらのインターフェイスを組み合わせて、ファイルやネットワークストリームなどの複雑なタイプを作成します。 3)ProcessData関数を使用して、これらの組み合わせインターフェイスを処理する方法を示します。このアプローチはコードの柔軟性、テスト可能性、再利用性を高めますが、過度の断片化と組み合わせの複雑さを避けるために注意する必要があります。

intionsingoareautomativitiveedemain foreThemain foreThemaindareusefurfurforseTup butChallenges.1)実行命令:rundistionsrunindediontionOrder.2)テスト:テスト:in functionsMayInterwithests、b


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ホットトピック









