Processus.Kill() ne semble pas de tuer le processus

J'ai de la difficulté à l'aide de Process.Kill(). Je pense que je dois être l'incompréhension comment il fonctionne. C'est ma fonction de test. Je commence un long processus en cours d'exécution (ping -t) et puis la tuer cinq secondes plus tard.

Je peux voir le processus de ping montrer, mais le processus est toujours là après mon programme se termine. Je dois le tuer manuellement.

Console.WriteLine("Total number of ping processes is {0}", Process.GetProcessesByName("ping").Length);

ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe");
Process process = new Process();

startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.Arguments = "/c ping -t 8.8.8.8";

Console.WriteLine("Staring ping process");
process.StartInfo = startInfo;
process.Start();
Thread.Sleep(5000);

Console.WriteLine("Total number of ping processes is {0}", Process.GetProcessesByName("ping").Length);
Thread.Sleep(5000);

Console.WriteLine("Killing ping process");
process.Kill();
Thread.Sleep(5000);

Console.WriteLine("Total number of ping processes is {0}", Process.GetProcessesByName("ping").Length);

Ce que je fais mal?

Testé ton code et il fonctionne très bien. Lorsque vous exécutez ce code?
Windows 8.1. Il a couru à partir de deux PowerShell et cmd.exe.
Aucune différence pour exécuter directement Ping.exe sans cmd?
Cela semble être la question. L'exécution du processus directement semble fonctionner. Aucune idée pourquoi tuer le cmd processus ne fonctionne pas?
parce que Ping est le processus enfant de cmd. Vous tuer cmd mais il ne sera pas aussi tuer tous les enfants, de Ping est toujours en cours d'exécution. Vous pouvez tuer tous les processus de hiérarchie. Voir aussi stackoverflow.com/q/3342941/1207195

OriginalL'auteur Kris Harper | 2015-05-15