2011-02-19 5 views
8

私は、Windows環境でプログラムを制御する方法を検討しています。Windowsの "画面"または別の代替手段に相当するWindows?

Linuxソフトウェア「screen」と少し似ていることをお勧めします。

私の検索の理由は、識別子を持つプログラムを(Windows上で)起動する必要があるため、後で他のプログラムを終了することなくその特定のプログラムを閉じることができるためです。実際のプログラム(.exeファイル)が複数回実行されています。とにかく私はそれを「名前を付ける」ことができますか?

私は現在、Linuxで次のように使用しています:

$ screen <params> <id> ./softwareprogram 

をそして私は、私は常にそれのIDでそれを見つけることができます知っている:)

それは第三の閉鎖または開始される外部プログラムですパーティープログラム。

私のプログラムは、違いがあれば、C++で書かれています。

編集:自分でIDを選択することはできません。プログラムを特定の名前で起動するのと同じですか?また、名前を指定してプロセスを強制終了するにはどうすればよいですか?

+0

@Christianと@CodeInChaos;それは非常に複雑に思えます。また、私がCreateProcess関数で起動した場合、プログラムをシャットダウン(またはクラッシュ)すると起動したプログラムが終了しますか? @Christian 自分で名前を付けたいと思います。私が取り組んでいるプログラムは名前をつけないので、誰が誰かを知るのは難しいでしょう。 この名前は、自分のデータベースを持つ外部マシンからのTCP接続に由来します(データベースは自分のプログラムでは使用できません)。だから、基本的に "stop:program588"のように送信し、私のプログラムはid "program588"でプログラムを停止させたい。この機能は非常に簡単ですwi –

答えて

1

プログラムを起動すると、ウィンドウ上でもプロセスIDを取得できます。 このプロセスIDを後で使用して、プログラムを再度終了することができます。

自分のIDを指定する必要がある場合は、たとえば次のように使用できます。あなたのIDとプロセスidとのマッピングを格納するためのレジストリ。開始コマンドを受け取った場合は、キーとしてレジストリに識別子を格納し、開始プロセスのPIDを値として格納します。 stopコマンドを受け取った場合は、レジストリからpidを取り出し、そのpidを削除してレジストリからそのキーを削除します。私は何のlinux見当もつかないものの代わりにあなたはもちろん、キー(自分の識別子)は、ファイル名とPIDでファイルをデータベースまたはフォルダを使用することができ、レジストリの

は、各ファイル

+0

ハンドルを使用する方が良いです - プロセスIDは再利用できますが、ハンドルを閉じるまでは再利用されません。レジストリに再起動しても生き残る必要のないデータを置かないでください。ಠ_ – bdonlan

-2

の内側にありますscreenコマンドは、CreateProcessから取得したプロセスハンドルを使用してみませんか?

プロセスIDも取得できますが、そのプロセスにオープンハンドルがある限り有効です。

lpProcessInformationパラメータには、process-idとprocess-handleの両方が含まれます。

1

現時点では、私は画面に相当するネイティブはないと思います。 Cygwinには画面の実装が含まれていますが、cygwinのオーバーヘッドがあります。問題は、WindowsとPosixベースのオペレーティングシステムが非常に異なる方法でコンソールを実装することです。 Windowsは、POSIX環境の一部である多くのtty機能をサポートしていません。つまり、APIコール(AttachConsoleおよびFreeConsole)を使用して、画面ユーティリティに最小限の機能を実装することができます。しかし、私はこのテーマについてもう少し研究しなければならないだろう。

関連する問題