mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-22 09:58:09 +00:00
restore: wait while processes are dying
If criu restore failed, criu should wait all processes because they hold files, namespaces and other stuff that caller might want to have released (in our case it was ploop device). Here we do this only for cases when processes are restored in a pid namespace. We'd like to do the same for non-ns case, but there's no simple way to wait for a bunch of unconnected processes. Another good side effect is that "Restoring FAILED." will be printed at the end of the log (now after we kill init tasks still have time to do smth and write log messages). Cc: Nikita Spiridonov <nspiridonov@odin.com> Reported-by: Nikita Spiridonov <nspiridonov@odin.com> Signed-off-by: Andrew Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
parent
275740a71e
commit
e36dbef13d
@ -1915,9 +1915,15 @@ out_kill:
|
||||
* otherwise an external proccesses can be killed.
|
||||
*/
|
||||
if (root_ns_mask & CLONE_NEWPID) {
|
||||
int status;
|
||||
|
||||
/* Kill init */
|
||||
if (root_item->pid.real > 0)
|
||||
kill(root_item->pid.real, SIGKILL);
|
||||
|
||||
if (waitpid(root_item->pid.real, &status, 0) < 0)
|
||||
pr_warn("Unable to wait %d: %s",
|
||||
root_item->pid.real, strerror(errno));
|
||||
} else {
|
||||
struct pstree_item *pi;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user