use threads; use IO::Handle; sub dummy { print "\n!!!!". $$; return 0; } open($handle, "| cat -v") || die "Unable to open connection to BT Driver: $!\n"; $handle->autoflush(1); #close $handle; If I uncomment this, threads can be joined. But I don't want to terminate this child process. $thr2 = threads->create(\&dummy); sleep 2; print "\n$thr2"; foreach $thr (threads->list(threads::joinable)) { print "\nIam here"; print "\n!!!". $thr; $thr->join(); }