From 23c57c7a81eebec7afca8e468cd30afa5dd08648 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 12 Apr 2026 15:18:56 +0000 Subject: [PATCH 1/4] Add Process.IsRunning(int processId) extension method with tests Agent-Logs-Url: https://github.com/Tyrrrz/PowerKit/sessions/1d46a42a-6dbc-4bcd-b0a6-e32434980772 Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com> --- PowerKit.Tests/ProcessExtensionsTests.cs | 33 ++++++++++++++++++++++++ PowerKit/Extensions/ProcessExtensions.cs | 25 ++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 PowerKit.Tests/ProcessExtensionsTests.cs create mode 100644 PowerKit/Extensions/ProcessExtensions.cs diff --git a/PowerKit.Tests/ProcessExtensionsTests.cs b/PowerKit.Tests/ProcessExtensionsTests.cs new file mode 100644 index 0000000..86bfa0e --- /dev/null +++ b/PowerKit.Tests/ProcessExtensionsTests.cs @@ -0,0 +1,33 @@ +using System; +using System.Diagnostics; +using FluentAssertions; +using PowerKit.Extensions; +using Xunit; + +namespace PowerKit.Tests; + +public class ProcessExtensionsTests +{ + [Fact] + public void IsRunning_CurrentProcess_Test() + { + // Act & assert + Process.IsRunning(Environment.ProcessId).Should().BeTrue(); + } + + [Fact] + public void IsRunning_ExitedProcess_Test() + { + // Arrange + using var process = Process.Start(new ProcessStartInfo("sleep", "0") + { + RedirectStandardOutput = true + })!; + + process.WaitForExit(); + var processId = process.Id; + + // Act & assert + Process.IsRunning(processId).Should().BeFalse(); + } +} diff --git a/PowerKit/Extensions/ProcessExtensions.cs b/PowerKit/Extensions/ProcessExtensions.cs new file mode 100644 index 0000000..292ecf1 --- /dev/null +++ b/PowerKit/Extensions/ProcessExtensions.cs @@ -0,0 +1,25 @@ +using System.Diagnostics; + +namespace PowerKit.Extensions; + +internal static class ProcessExtensions +{ + extension(Process) + { + /// + /// Checks whether the process identified by the specified ID is currently running. + /// + public static bool IsRunning(int processId) + { + try + { + using var process = Process.GetProcessById(processId); + return !process.HasExited; + } + catch + { + return false; + } + } + } +} From d8aeddfd6f326571b0e34761824d3c681b7fde0e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 12 Apr 2026 15:20:59 +0000 Subject: [PATCH 2/4] Use dotnet --version for cross-platform process exit test Agent-Logs-Url: https://github.com/Tyrrrz/PowerKit/sessions/1d46a42a-6dbc-4bcd-b0a6-e32434980772 Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com> --- PowerKit.Tests/ProcessExtensionsTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PowerKit.Tests/ProcessExtensionsTests.cs b/PowerKit.Tests/ProcessExtensionsTests.cs index 86bfa0e..049b644 100644 --- a/PowerKit.Tests/ProcessExtensionsTests.cs +++ b/PowerKit.Tests/ProcessExtensionsTests.cs @@ -19,7 +19,7 @@ public void IsRunning_CurrentProcess_Test() public void IsRunning_ExitedProcess_Test() { // Arrange - using var process = Process.Start(new ProcessStartInfo("sleep", "0") + using var process = Process.Start(new ProcessStartInfo("dotnet", "--version") { RedirectStandardOutput = true })!; From f3bf13b98856ae13efb906b2a9888a467b7681ed Mon Sep 17 00:00:00 2001 From: Oleksii Holub <1935960+Tyrrrz@users.noreply.github.com> Date: Sun, 12 Apr 2026 18:54:14 +0300 Subject: [PATCH 3/4] Update ProcessExtensionsTests.cs --- PowerKit.Tests/ProcessExtensionsTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PowerKit.Tests/ProcessExtensionsTests.cs b/PowerKit.Tests/ProcessExtensionsTests.cs index 049b644..7d9b5a3 100644 --- a/PowerKit.Tests/ProcessExtensionsTests.cs +++ b/PowerKit.Tests/ProcessExtensionsTests.cs @@ -9,14 +9,14 @@ namespace PowerKit.Tests; public class ProcessExtensionsTests { [Fact] - public void IsRunning_CurrentProcess_Test() + public void IsRunning_Running_Test() { // Act & assert Process.IsRunning(Environment.ProcessId).Should().BeTrue(); } [Fact] - public void IsRunning_ExitedProcess_Test() + public void IsRunning_NotRunning_Test() { // Arrange using var process = Process.Start(new ProcessStartInfo("dotnet", "--version") From 2708d820325998c2634f8ef3f49df43169cba35f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 12 Apr 2026 15:55:32 +0000 Subject: [PATCH 4/4] Use WaitForExitAsync in ProcessExtensionsTests Agent-Logs-Url: https://github.com/Tyrrrz/PowerKit/sessions/2314dced-9a6c-4bae-b31c-81016f1040a9 Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com> --- PowerKit.Tests/ProcessExtensionsTests.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/PowerKit.Tests/ProcessExtensionsTests.cs b/PowerKit.Tests/ProcessExtensionsTests.cs index 7d9b5a3..4ffcf77 100644 --- a/PowerKit.Tests/ProcessExtensionsTests.cs +++ b/PowerKit.Tests/ProcessExtensionsTests.cs @@ -1,5 +1,6 @@ using System; using System.Diagnostics; +using System.Threading.Tasks; using FluentAssertions; using PowerKit.Extensions; using Xunit; @@ -16,7 +17,7 @@ public void IsRunning_Running_Test() } [Fact] - public void IsRunning_NotRunning_Test() + public async Task IsRunning_NotRunning_Test() { // Arrange using var process = Process.Start(new ProcessStartInfo("dotnet", "--version") @@ -24,7 +25,7 @@ public void IsRunning_NotRunning_Test() RedirectStandardOutput = true })!; - process.WaitForExit(); + await process.WaitForExitAsync(); var processId = process.Id; // Act & assert