chrome based apps can not be run under qemu user mode chrome uses /proc/self/exe to fork render process. Here a simple code to reproduce the issue. It's output parent then child but failed with qemu: unknown option 'type=renderer'. Maybe we can modify exec syscall to replace /proc/self/exe to the real path. //gcc -o self self.c #include #include #include int main(int argc, char** argv) { if(argc==1){ printf ("parent\n"); if ( fork() == 0 ) { return execl("/proc/self/exe","/proc/self/exe", "--type=renderer",NULL); } } else { printf ("child\n"); } return 0; } similar reports: https://github.com/AppImage/AppImageKit/issues/965 https://github.com/golang/go/issues/42080 Workardound: compile chrome or your chrome based app with a patch to content/common/child_process_host_impl.cc:GetChildPath, get the realpath of /proc/self/exe: diff --git a/content/common/child_process_host_impl.cc b/content/common/child_process_host_impl.cc index bc78aba80ac8..9fab74d3bae8 100644 --- a/content/common/child_process_host_impl.cc +++ b/content/common/child_process_host_impl.cc @@ -60,8 +60,12 @@ base::FilePath ChildProcessHost::GetChildPath(int flags) { #if defined(OS_LINUX) // Use /proc/self/exe rather than our known binary path so updates // can't swap out the binary from underneath us. - if (child_path.empty() && flags & CHILD_ALLOW_SELF) - child_path = base::FilePath(base::kProcSelfExe); + if (child_path.empty() && flags & CHILD_ALLOW_SELF) { + if (!ReadSymbolicLink(base::FilePath(base::kProcSelfExe), &child_path)) { + NOTREACHED() << "Unable to resolve " << base::kProcSelfExe << "."; + child_path = base::FilePath(base::kProcSelfExe); + } + } #endif // On most platforms, the child executable is the same as the current