env
修正された信号実行プログラムを使用できるなどnice
のコマンド実行プログラムはありますか?nohup
私の場合は何かSIGINT
をSIG_DFL
。
なぜこれが必要ですか?バックグラウンドプロセスの非対話型設定のため、組み込みbash
シェルを使用してリセットすることはできません。SIG_IGN
SIGINT
trap
https://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 $!
プレフィックスが削除されると、untrap
Ctrl-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]: $!";