summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllen Byrne <byrn@hdfgroup.org>2018-07-27 17:27:59 (GMT)
committerAllen Byrne <byrn@hdfgroup.org>2018-07-27 17:27:59 (GMT)
commite205cb82669ffecead4efa2ebbb9c6904fe8b4f1 (patch)
tree07fb0005f2dcfb4d609712290715e4832eeaf7b1
parentf9bfd5d9ad6d67287aeb553242f4d2c8ba036104 (diff)
parent5fce1be6466177903bf4e192e141b416f9c9a73d (diff)
downloadhdf5-e205cb82669ffecead4efa2ebbb9c6904fe8b4f1.zip
hdf5-e205cb82669ffecead4efa2ebbb9c6904fe8b4f1.tar.gz
hdf5-e205cb82669ffecead4efa2ebbb9c6904fe8b4f1.tar.bz2
Merge pull request #1155 in HDFFV/hdf5 from ~BYRN/hdf5_adb:hdf5_1_10.sync to hdf5_1_10.sync
* commit '5fce1be6466177903bf4e192e141b416f9c9a73d': Add missing file and remove deleted
-rw-r--r--MANIFEST2
-rw-r--r--bin/runbkgprog87
2 files changed, 87 insertions, 2 deletions
diff --git a/MANIFEST b/MANIFEST
index 1165240..bc18d67 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1606,8 +1606,6 @@
# h5dump test files
./tools/testfiles/charsets.h5
./tools/testfiles/charsets.ddl
-./tools/testfiles/err_attr_dspace.h5
-./tools/testfiles/err_attr_dspace.ddl
./tools/testfiles/family_file00000.h5
./tools/testfiles/family_file00001.h5
./tools/testfiles/family_file00002.h5
diff --git a/bin/runbkgprog b/bin/runbkgprog
new file mode 100644
index 0000000..69fa2d0
--- /dev/null
+++ b/bin/runbkgprog
@@ -0,0 +1,87 @@
+#!/usr/bin/perl -w
+require 5.003;
+$indent=4;
+
+#
+# Copyright by The HDF Group.
+# Copyright by the Board of Trustees of the University of Illinois.
+# All rights reserved.
+#
+# This file is part of HDF5. The full HDF5 copyright notice, including
+# terms governing use, modification, and redistribution, is contained in
+# the COPYING file, which can be found at the root of the source code
+# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.
+# If you do not have access to either file, you may request a copy from
+# help@hdfgroup.org.
+#
+
+# Run program in background
+#
+use warnings;
+use strict;
+
+use Carp;
+use Time::HiRes;
+use POSIX 'setsid';
+
+my $child_pid;
+my $child_proc;
+my $cmd = $ARGV[0];
+my $debug = 1;
+
+print "\nStart child process\n";
+start_child();
+print "\nStarted child process\n";
+
+sub start_child {
+ die "cannot execute cmd: $cmd" unless -x $cmd;
+ if ($^O eq 'MSWin32') { # Windows
+ require Win32::Process;
+ Win32::Process::Create($child_proc, $cmd, $cmd, 0, 0, ".") || confess "Could not spawn child: $!";
+ $child_pid = $child_proc->GetProcessID();
+ }
+ else { # Unix
+ $SIG{CHLD} = 'IGNORE';
+ $child_pid = fork();
+ unless (defined $child_pid) {
+ confess "Could not spawn child (Unix): $!";
+ }
+ if ($child_pid == 0) { # child
+ unless ($debug) {
+ open STDIN, "<", "/dev/null" or die "Can't read /dev/null: $!";
+ open STDOUT, ">", "/dev/null" or die "Can't write /dev/null: $!";
+ }
+ setsid or warn "setsid cannot start a new session: $!";
+ unless ($debug) {
+ open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
+ }
+ local $| = 1;
+ unless (exec($cmd)) {
+ confess "Could not start child: $cmd: $!";
+ CORE::exit(0);
+ }
+ }
+ # parent
+ $SIG{CHLD} = 'DEFAULT';
+ }
+ # catch early child exit, e.g. if program path is incorrect
+ sleep(1.0);
+ POSIX::waitpid(-1, POSIX::WNOHANG()); # clean up any defunct child process
+ if (kill(0,$child_pid)) {
+ print "\nStarted child process id $child_pid\n";
+ }
+ else {
+ warn "Child process exited quickly: $cmd: process $child_pid";
+ }
+}
+
+sub stop_child
+{
+ if ($^O eq 'MSWin32') { # Windows
+ Win32::Process::KillProcess($child_pid,0);
+ }
+ else { # Unix
+ kill 9, $child_pid || warn "could not kill process $child_pid: $!";
+ }
+ print "Stopped child process id $child_pid\n";
+}