->handle_request() will be called in a child process, so it's no surprise that $pid is undefined there (see previous discussion), as $pid is only set in the parent. kill 9, $$ only kills the child process, so that won't work either.
You haven't shown the code that you used to write the PID to a file. You should show that code, or output more diagnostics while running your code to track what values $$ and $pid have at which time, and also what the values read from the .pid file are. Do you check for failure when opening the file in the child?