public static function process_shutdown_tasks()
 {
     // TODO: possibly do something like posix_getpid() != pts_client::$startup_pid in case shutdown function is called from a child process
     // Generate Phodevi Smart Cache
     if (pts_client::read_env('NO_PHODEVI_CACHE') == false && pts_client::read_env('EXTERNAL_PHODEVI_CACHE') == false) {
         if (pts_config::read_bool_config('PhoronixTestSuite/Options/General/UsePhodeviCache', 'TRUE')) {
             pts_storage_object::set_in_file(PTS_CORE_STORAGE, 'phodevi_smart_cache', phodevi::get_phodevi_cache_object(PTS_USER_PATH, PTS_CORE_VERSION));
         } else {
             pts_storage_object::set_in_file(PTS_CORE_STORAGE, 'phodevi_smart_cache', null);
         }
     }
     if (is_array(self::$lock_pointers)) {
         foreach (array_keys(self::$lock_pointers) as $lock_file) {
             self::release_lock($lock_file);
         }
     }
     foreach (self::$forked_pids as $pid) {
         if (is_dir('/proc/' . $pid) && function_exists('posix_kill')) {
             posix_kill($pid, SIGKILL);
         }
     }
 }