Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】A Process killer CLI project using Java Process API

2025年09月25日に「Dev.to」が公開したITニュース「A Process killer CLI project using Java Process API」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

このJava製CLIツールは、OSごとの複雑なコマンドを覚えず、プロセス管理を簡単にする。WindowsやLinux、macOSで共通の操作を提供し、ポートでプロセスを探したり、PIDで強制終了したりでき、SE初心者も効率的なシステム管理が可能だ。

ITニュース解説

このニュース記事は、システムエンジニアを目指す初心者が知っておくべき「プロセス管理」の基礎と、それをJavaで実現する実践的な方法について解説している。ここで紹介されているのは、Javaの「Process API」という機能を使って、コンピュータ上で動いているプログラム(プロセスと呼ぶ)を見つけたり、強制的に終了させたりするコマンドラインツール(CLIツール)を作るプロジェクトだ。

まず、なぜこのようなツールが必要なのかを説明しよう。コンピュータでは、ウェブブラウザやテキストエディタ、ゲームなど、たくさんのプログラムが常に動いている。これらが「プロセス」だ。プロセスはそれぞれ、CPUやメモリなどのシステム資源を使い、時には特定の「ポート」という通信用の入り口を占有する。もし、あるプロセスが予期せぬ動作をしたり、他のプログラムの邪魔をしたり、特定のポートを使い続けてしまったりすると、システム全体に問題が生じることがある。そんな時、そのプロセスを停止させる必要がある。

しかし、プロセスの検索や終了といった操作は、Windows、macOS、Linuxといった異なるオペレーティングシステム(OS)によって、使うべきコマンドが全く違うのが現状だ。例えば、Windowsではnetstattaskkill、LinuxやmacOSではlsofkillといったコマンドを使う。これらのコマンドはそれぞれ異なる書式を持ち、覚えるのが大変で、初心者にとっては特に敷居が高い。

このJavaプロジェクトは、その問題を解決するために作られた。目的は、OSの種類を意識することなく、一つのシンプルなコマンド体系でプロセス管理ができるツールを提供することだ。Javaという言語は、「一度書けばどこでも動く(Write Once, Run Anywhere)」という特徴を持っており、まさにクロスプラットフォームなツールを作るのに適している。このプロジェクトでは、Javaの標準機能である「Process API」を最大限に活用している。外部の特別なライブラリは一切使わず、Javaの基本機能だけで完結する点も注目すべきだ。

ツールが提供する主な機能は以下の通りだ。 一つ目は、「refresh」コマンドで、現在実行中のすべてのプロセスと、それらが使用しているポートの一覧を表示する。アプリケーションを起動すると自動的にこの一覧が表示されるので、システムの状況を一目で把握できる。 二つ目は、「find by <ポート番号>」コマンドだ。例えば「find by 8080」と入力すると、8080番ポートを使っているプロセスのID(PID)を教えてくれる。これは、ウェブサーバーやデータベースなどが特定のポートを占有していて、新しいサービスが起動できない場合などに非常に役立つ機能だ。 三つ目は、「kill <PID>」コマンドだ。これは、指定したPIDのプロセスを強制的に終了させる。例えば「kill 12345」と入力すると、PIDが12345のプロセスが停止する。プロセスが応答しなくなった場合や、不要なプロセスを確実に停止させたい場合に使う。プロセスを停止した後は、自動的にプロセス一覧が更新され、本当に停止したかを確認できる。 最後に、「q」コマンドで、このツール自体を終了させることができる。

このツールがOSごとのコマンドの違いをどのように吸収しているかというと、JavaのProcess APIの一部であるProcessBuilderというクラスを使っている。ProcessBuilderは、Javaプログラムの中からOSのコマンドを実行するための機能を提供してくれる。このプロジェクトでは、ユーザーがコマンドを入力すると、まず実行中のOSがWindowsなのか、それともLinux/macOSなのかをプログラムが自動で判断する。そして、そのOSに適したコマンド(例えばWindowsならnetstat -ano、Linux/macOSならlsof -i -P -n)を内部で組み立てて、ProcessBuilderを通して実行しているのだ。結果として得られたOSコマンドの出力は、Javaプログラムが受け取り、それを整形してユーザーに表示する。

コードの構造にも工夫が見られる。初期のバージョンでは、すべての処理がApp.javaという一つのクラスに集中していたが、改良版ではProcessManagerという別のクラスを作成し、OSコマンドの実行や出力の解析といった具体的なプロセス管理のロジックを分離している。これにより、Appクラスはユーザーインターフェースとコマンドの振り分けに専念し、ProcessManagerクラスがプロセスの実務を担うという、役割分担がはっきりとした見やすい構造になった。特に、executeCommandという共通メソッドを導入したことで、コマンド実行の処理が一度書けば済むようになり、コードの重複が減り、保守性が向上している。また、ユーザーが入力したPIDやポート番号が本当に数値であるかをチェックするvalidateメソッドも用意されており、不正な入力によるプログラムの異常終了を防ぐための配慮もされている。

このようなツールを自ら作り、その仕組みを理解することは、システムエンジニアを目指す初心者にとって非常に大きな学びとなる。OSがどのようにプロセスを管理しているか、Javaプログラムから外部のOSコマンドをどのように実行できるか、異なるOS環境に対応するためのプログラミングの考え方、ユーザーからの入力を安全に処理する方法など、実用的な知識が詰まっているからだ。このプロジェクトは、単に便利なツールを作るだけでなく、コンピュータシステムの根幹を理解するための良い教材となるだろう。

関連コンテンツ

関連IT用語