diff --git a/src/main.rs b/src/main.rs
index 62035960959e346618d6a53056dd70ce24879f43..8bb81e2052f8bb8d7c4788e7deb52af625c09b1f 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -133,12 +133,14 @@ fn parse_args() -> CommandLineArgs {
 
 fn set_unique_pid() -> nix::Result<()> {
     let pgid = unistd::getpid();
-    if pgid == unistd::tcgetpgrp(nix::libc::STDIN_FILENO)? {
-        return Ok(());
+    if pgid != unistd::getpgrp() {
+        unistd::setpgid(pgid, pgid)?;
     }
-    unistd::setpgid(pgid, pgid)?;
-    unsafe { signal::signal(Signal::SIGTTOU, SigHandler::SigIgn) }?;
-    unistd::tcsetpgrp(nix::libc::STDIN_FILENO, pgid)
+    if pgid != unistd::tcgetpgrp(nix::libc::STDIN_FILENO)? {
+        unsafe { signal::signal(Signal::SIGTTOU, SigHandler::SigIgn) }?;
+        unistd::tcsetpgrp(nix::libc::STDIN_FILENO, pgid)?;
+    }
+    Ok(())
 }
 
 fn main() {