メモ帳とtaskmgrが開いているという2つのプロセスがあります。これらの2つまたはいくつかのプロセスを強制終了したいのですが、どうすればこれを実行できますか?これまでのところ、私はグーグルでこれを思いついた:
Process.GetProcesses().Where(p => p.ProcessName == "notepad,taskmgr").ToList().ForEach(y => y.Kill());
上記の2つのプロセスを区別する方法がわかりませんか?
そのlinqクエリは、名前が「notepad、taskmgr」の場合にのみプロセスを検索しているように見えます。両方を取得するには、次のようなクエリを使用します。
Process.GetProcesses().Where(p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr").ToList().ForEach(y => y.Kill());
さらにプロセスを追加する場合は、次のようなことを行うことをお勧めします。
var processNamesToKill = new List<string> { "notepad", "taskmgr", "someotherprocess" };
Process.GetProcesses().Where(p => processNamesToKill.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());
その後、そのリストに他のプロセスを追加できます。見つけたものを見つけることに関しては、ForEachで、必要に応じて、によって名前にアクセスy.ProcessName
し、条件付きで使用することができます。
.exe
編集:必要に応じて、これらのプロセス名に追加します。
強制終了するプロセスを含むリストまたは配列を作成し、リストでプロセスの名前を確認します
List<string> killme = new List<string> { "notepad", "taskmgr" }
Process.GetProcesses().Where(p => killme.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());
削除された回答に含まれていた1つのライナー:
Process.GetProcesses().Where(p => new[] {"notepad", "taskmgr"}.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());
あなたはこれをやろうとしていますか?
Process.GetProcesses().Where(p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr")
.ToList().ForEach(y => y.Kill());
もし私があなただったら、私がすることは、一度に1つの名前だけをすることです。コードを読んでいる人にとっては、はるかに理解しやすいです。
class Program
{
static void Main(string[] args)
{
killProcess("notepad.exe");
killProcess("taskmgr");
}
public static void killProcess(string name)
{
foreach (Process process in Process.GetProcessesByName(name))
{
process.Kill();
}
}
}
var processesToKill = new [] {"notepad", "iexplorer"};
var processes = Process.GetProcesses().Where(p => processesToKill.Contains(p.ProcessName)).ToList();
processes.ForEach(p => p.Kill());
強制終了するプロセスのリストがある場合は、を使用できます。これは機能Contains
しp => p.ProcessName == "notepad,taskmgr"
ません(「notepad、taskmgr」という名前のプロセスはありません。コンマを追加しても特別な意味はありません)。
代わりに次のようなものを試してください
var processesToKill = new Collection<string> { "notepad", "taskmgr" };
foreach (var process in Process.GetProcesses().Where(p => processesToKill.Contains(p)))
{
process.Kill();
}
残りのlinqが機能する場合、その場所は次のようになります。
... Where( p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr" ) ...
それ以外の場合は、次のように、強制終了するプロセス名のセットを作成することをお勧めします。
var set = new HashSet<string>() { "notepad.exe", "taskmgr.txt", "someotherthing.exe" };
... linq .. Where( p=> set.Contains( p.ProcessName ) )...
またはセットに対する他のさまざまな結合操作。