The problem with running the commands asynchronously is that the program still would block for the last async to finish, so when monit calls this program, it still would wait as if it were synchronous.