lib/scripts/process
author wenzelm
Tue, 21 Sep 2010 22:16:22 +0200
changeset 39581 430ff865089b
parent 39576 48baf61cb888
child 39583 c1e9c6dfeff8
permissions -rwxr-xr-x
refined Isabelle_System.bash_output: pass pid via stdout, separate stdout/stderr;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
35023
16f9877abf0b modernized perl scripts: prefer standalone executables;
wenzelm
parents: 34197
diff changeset
     1
#!/usr/bin/env perl
26092
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
     2
#
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
     3
# Author: Makarius
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
     4
#
39576
48baf61cb888 refined ML/Scala bash wrapper, based on more general lib/scripts/process;
wenzelm
parents: 35024
diff changeset
     5
# exec process - with optional process group and report of pid
26092
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
     6
#
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
     7
35023
16f9877abf0b modernized perl scripts: prefer standalone executables;
wenzelm
parents: 34197
diff changeset
     8
use warnings;
16f9877abf0b modernized perl scripts: prefer standalone executables;
wenzelm
parents: 34197
diff changeset
     9
use strict;
16f9877abf0b modernized perl scripts: prefer standalone executables;
wenzelm
parents: 34197
diff changeset
    10
26092
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
    11
# args
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
    12
39576
48baf61cb888 refined ML/Scala bash wrapper, based on more general lib/scripts/process;
wenzelm
parents: 35024
diff changeset
    13
my ($group, $pid_name, $cmd_line) = @ARGV;
26092
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
    14
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
    15
39576
48baf61cb888 refined ML/Scala bash wrapper, based on more general lib/scripts/process;
wenzelm
parents: 35024
diff changeset
    16
# process group
26092
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
    17
26096
783f957dcb01 replaced setpgrp by more elaborate setsid;
wenzelm
parents: 26092
diff changeset
    18
if ($group eq "group") {
783f957dcb01 replaced setpgrp by more elaborate setsid;
wenzelm
parents: 26092
diff changeset
    19
  use POSIX "setsid";
26107
4b5e5fc1d11f removed junk;
wenzelm
parents: 26096
diff changeset
    20
  POSIX::setsid || die $!;
26096
783f957dcb01 replaced setpgrp by more elaborate setsid;
wenzelm
parents: 26092
diff changeset
    21
}
26092
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
    22
39576
48baf61cb888 refined ML/Scala bash wrapper, based on more general lib/scripts/process;
wenzelm
parents: 35024
diff changeset
    23
48baf61cb888 refined ML/Scala bash wrapper, based on more general lib/scripts/process;
wenzelm
parents: 35024
diff changeset
    24
# pid
48baf61cb888 refined ML/Scala bash wrapper, based on more general lib/scripts/process;
wenzelm
parents: 35024
diff changeset
    25
39581
430ff865089b refined Isabelle_System.bash_output: pass pid via stdout, separate stdout/stderr;
wenzelm
parents: 39576
diff changeset
    26
if ($pid_name eq "-") {
430ff865089b refined Isabelle_System.bash_output: pass pid via stdout, separate stdout/stderr;
wenzelm
parents: 39576
diff changeset
    27
  print "$$\n";
430ff865089b refined Isabelle_System.bash_output: pass pid via stdout, separate stdout/stderr;
wenzelm
parents: 39576
diff changeset
    28
}
430ff865089b refined Isabelle_System.bash_output: pass pid via stdout, separate stdout/stderr;
wenzelm
parents: 39576
diff changeset
    29
else {
430ff865089b refined Isabelle_System.bash_output: pass pid via stdout, separate stdout/stderr;
wenzelm
parents: 39576
diff changeset
    30
  open (PID_FILE, ">", $pid_name) || die $!;
430ff865089b refined Isabelle_System.bash_output: pass pid via stdout, separate stdout/stderr;
wenzelm
parents: 39576
diff changeset
    31
  print PID_FILE "$$";
430ff865089b refined Isabelle_System.bash_output: pass pid via stdout, separate stdout/stderr;
wenzelm
parents: 39576
diff changeset
    32
  close PID_FILE;
430ff865089b refined Isabelle_System.bash_output: pass pid via stdout, separate stdout/stderr;
wenzelm
parents: 39576
diff changeset
    33
}
26092
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
    34
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
    35
39576
48baf61cb888 refined ML/Scala bash wrapper, based on more general lib/scripts/process;
wenzelm
parents: 35024
diff changeset
    36
# exec process
26092
260cca2e16fa system.pl - invoke shell command line (with robust signal handling);
wenzelm
parents:
diff changeset
    37
39581
430ff865089b refined Isabelle_System.bash_output: pass pid via stdout, separate stdout/stderr;
wenzelm
parents: 39576
diff changeset
    38
exec $cmd_line;
39576
48baf61cb888 refined ML/Scala bash wrapper, based on more general lib/scripts/process;
wenzelm
parents: 35024
diff changeset
    39