まず、プログラミングソリューションを要求するのではなく、このプログラムがどのように機能するかを示すためにこのコードを公開するだけです。
以下のプログラムを試しました(Virtual Boxで):
#include <iostream>
#include <string.h>
#include <windows.h>
using namespace std;
int main(int argc, char **argv){
//program will create a command string that will be executed by the system console to call itself in another process (create another process): cmd = start program_name.exe
string cmd = string("start ") + string(*argv);
//execute cmd: a temporary console will be opened, then execute cmd, finally the console will be closed
system(cmd.c_str());
//display a message box (In fact, display many message boxes) which annoying user
MessageBowW(0, L"Message box content", L"Message box title", MB_OK | MB_ICONEXCLAMATION | MB_TOPMOST);
//if the user pressed OK button in a message box, the message box will display again (by recursion)
return main(argc, argv);
}
繰り返し自分自身を呼び出すことにより、このプログラムは多くの非常に邪魔なメッセージボックスを開き、システムを遅くします。また、このプログラムは、ユーザーが操作を行うことを防ぎます。
私はシステムを再起動する以上のことはできません。
私の質問は、誤ってこのプログラムを開いた場合(ダブルクリックで直接開く)、Windowsを再起動せずにすべてのプロセスを停止する方法ですか?何か案が?
タスクマネージャーが機能せずにプログラムが終了しますか?その場合は、ログオフする必要があります。
—
カラン
ただし、ログオフすると、保存されていないデータが失われる可能性があります
—
-DMaster
はい。ただし、複数のインスタンスを開いてすべてのリソースを占有する積極的なプロセスがある場合、システムがほぼ応答しなくなるため、すぐに何もできなくなります。可能であれば、アプリをすぐに閉じて、保存を求められたら[はい]と答えてからログオフできます。または、タスクマネージャーを開いてプロセスを強制終了しますが、フォーカスをオーバーラップまたはスチールする新しいウィンドウを生成し続ける場合、それは困難な場合があります。
—
カラン
Windowsは安全な制御のための十分なツールを提供していないようで、ユーザーは降伏しなければならない場合があります。この事故を元に戻すのに役立つ便利なツールはどこにありますか?
—
DMaster
あなたが説明したのは基本的にフォーク爆弾であり、Linuxでさえ
—
カラン
ulimit -u
使用しないとリソースをすぐに使い果たす可能性があります。記録のために、Firefoxを実行し、保存されていないファイルでWordとメモ帳を開いて、ログオフすることができました。その後、Windowsはプログラムのすべてのインスタンスを強制終了することを示し、すべてが終了するとすぐにログオフをキャンセルし、問題なく作業を続行できるようにしました。