Unix 신호를 관리하기 위한 명령줄 도구가 있습니까?

Unix 신호를 관리하기 위한 명령줄 도구가 있습니까?

env수정된 신호 실행 프로그램을 사용할 수 있는 nice, 등과 같은 명령 실행 프로그램 이 있습니까 ? nohup제 경우에는 무언가 SIGINTSIG_DFL.

왜 이것이 필요합니까? 백그라운드 프로세스의 비대화형 설정으로 인해 bash내장 셸을 사용하여 재설정할 수 없습니다.SIG_IGNSIGINTtraphttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug=573780

upd: SIGINT는 bash 4.3 백그라운드 서브셸에서 무시되지 않으며 다른 백그라운드 프로그램은 여전히 ​​이를 무시합니다.

http://tiswww.case.edu/php/chet/bash/CHANGES

시간. 비동기 서브셸 명령에서 SIGINT 및 SIGQUIT가 포착되지 않는 버그를 수정했습니다.

답변1

아니요. Perl로 작성하는 것은 쉽습니다. untrap스크립트 는 다음과 같습니다 .

#!/usr/bin/perl
$SIG{INT} = "DEFAULT";
exec { $ARGV[0] } @ARGV or die "couldn't exec $ARGV[0]: $!";

사용 예:

#!/bin/bash
untrap bash -c '
    sleep 3
    echo aaa
' &
trap '' INT
wait $!

접두사가 제거되면 untrapCtrl-C는 스크립트를 종료하지 않습니다 .

보다 일반적인 스크립트:

#!/usr/bin/perl

use Getopt::Long;

GetOptions(
    'help' => sub {
        print "usage: $0 [--sig={INT|HUP|...}={IGNORE|DEFAULT}]... COMMAND [ARG]...\n";
        exit 0;
    },
    'sig=s%' =>
    sub {
        my $action = $_[2];
        my $signame = $_[1];
        die "bad action $action" unless ($action eq "IGNORE" or $action eq "DEFAULT");
        die "bad signame $signame" if ($signame eq "__DIE__" or $signame eq "__WARN__");
        $SIG{$_[1]} = $action;
    }) or exit 1;

exec { $ARGV[0] } @ARGV or die "couldn't exec $ARGV[0]: $!";

관련 정보