From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 7A35767D23 for ; Tue, 10 Nov 2020 15:15:42 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 783C122CBF for ; Tue, 10 Nov 2020 15:15:42 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 7B91622CA0 for ; Tue, 10 Nov 2020 15:15:41 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 4124346063 for ; Tue, 10 Nov 2020 15:15:41 +0100 (CET) From: Stoiko Ivanov To: pve-devel@lists.proxmox.com Date: Tue, 10 Nov 2020 15:15:29 +0100 Message-Id: <20201110141530.30904-3-s.ivanov@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201110141530.30904-1-s.ivanov@proxmox.com> References: <20201110141530.30904-1-s.ivanov@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.095 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH installer 2/3] add run_in_background X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Nov 2020 14:15:42 -0000 certain tasks done during the installer need not block the GUI (e.g. setting the keymap of the console, to have the correct one set in the shell on vt3) and take a longer time. This patch adds a simple run_in_background method, which forks and runs the provided code in the child. Before exiting the children get reaped. Signed-off-by: Stoiko Ivanov --- proxinstall | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/proxinstall b/proxinstall index 9977f44..1551e18 100755 --- a/proxinstall +++ b/proxinstall @@ -21,6 +21,7 @@ use Data::Dumper; use File::Basename; use File::Path; use Time::HiRes; +use POSIX ":sys_wait_h"; use ProxmoxInstallerSetup; @@ -484,6 +485,23 @@ sub run_command { return $ostream; } +# forks and runs the provided coderef in the child +# do not use syscmd or run_command as both confuse the GTK mainloop if +# run from a child process +sub run_in_background { + my ($cmd) = @_; + + my $pid = fork() // die "fork failed: $!\n"; + if (!$pid) { + eval { $cmd->(); }; + if (my $err = $@) { + warn "run_in_background error: $err\n"; + POSIX::_exit(1); + } + POSIX::_exit(0); + } +} + sub detect_country { print "trying to detect country...\n"; @@ -3583,4 +3601,9 @@ create_intro_view () if !$initial_error; Gtk3->main; +# reap left over zombie processes +while ((my $child = waitpid(-1, POSIX::WNOHANG)) > 0) { + print "reaped child $child\n"; +} + exit 0; -- 2.20.1