in reply to working with pid's

Well... this is not entirely a perl solution, but it's something you should consider... Make virtual links "ln -s filename linkname" to q3ded (or copies), in the same directory...
Call them q3ctf q3tourney q3team... then execute them with these alternate names. The program will execute the same, but you can use commands like killall .
Furthermore, if at this point you'd wish to use perl, it becomes easier to distinguish between the different games, based on actual process name. a simple open (GAMES,"ps cax|grep $gamename|awk '{print $4}' |"); should list your game. (the awk command may vary, if your columns are set up differently in ps). that way you could just
@games=<GAMES>; foreach $running_game (@games) { print "some sort of menu here maybe.\n or maybe a webpage.<br>"; #or maybe just system ("killall -$signal $running_game");") }
Alternatively, you can drop the awk, and easily collect the PID and other info.