#include "base/process/kill.h"
#include "base/task/thread_pool.h"
namespace base {
void EnsureProcessTerminated(Process process) {
DCHECK(!process.is_current());
constexpr int kWaitBeforeKillSeconds = 2;
#if TARGET_OS_SIMULATOR
if (!process.IsContentProcess()) {
WaitForChildToDie(process.Pid(), kWaitBeforeKillSeconds);
return;
}
#endif
if (process.WaitForExitWithTimeout(TimeDelta(), nullptr)) {
return;
}
ThreadPool::PostDelayedTask(
FROM_HERE,
{TaskPriority::BEST_EFFORT, TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
BindOnce(
[](Process process) {
if (process.WaitForExitWithTimeout(TimeDelta(), nullptr)) {
return;
}
process.Terminate(-1, false);
},
std::move(process)),
Seconds(kWaitBeforeKillSeconds));
}
}