#! perl -slw use strict; use Win32::API::Prototype; use constant PROCESS_TERMINATE => 1; ApiLink( 'Kernel32', 'HANDLE OpenProcess( DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId )' ) or die $^E; ApiLink( 'Kernel32', 'BOOL TerminateProcess( HANDLE hProcess, UINT uExitCode )' ) or die $^E; if( my $hProc = OpenProcess( PROCESS_TERMINATE, 0, $ARGV[ 0 ] ) ) { print "Got handle to process; Can you kill it?"; die 'Drat' if =~ m[^y]i; print "I'll try"; print TerminateProcess( $hProc, -1 ) ? 'It sleeps with da fishies!' : 'Double drat!'; } else { print "OpenProcess failed: $^E"; } #### do{ my $pid = open my $in, "p:/test/dummy.exe |" or die $!; $pid{ $pid }++; printf "\r%7d : $pid ", scalar keys %pid; print " Reused\n\n" if $pid == 65992 ## The first pid } for 1 .. 1_000_000; #### 14281 : 65992 Reused 19112 : 65992 Reused 19112 : 60132 Terminating on signal SIGINT(2)