【发布时间】:2015-03-11 14:24:59
【问题描述】:
我正在尝试使用 Perl system 调用在终端窗口中将 Emacs 作为前台进程运行。当我在终端窗口中按CTRL-C 时,我想终止 Emacs 和 Perl 脚本。但是,只有 Emacs 命令会终止。这是一个示例脚本test.pl:
#! /usr/bin/env perl
use strict;
use warnings;
my $cmd = shift;
for ( my $i = 1; $i <= 3; $i ++) {
my $res = system ($cmd);
if ( $res == -1 ) {
die "Failed to execute '$cmd': $!\n";
}
my $signal = ($? & 127);
my $exit_code = ($? >> 8);
print "exit_code = $exit_code, signal = $signal\n";
if ( $signal ) {
die "Command '$cmd' died with signal $signal\n";
}
}
的输出
$ test.pl 'emacs file.txt'
是(按CTRL-C三下后):
^Cexit_code = 0,信号 = 0
^Cexit_code = 0,信号 = 0
^Cexit_code = 0,信号 = 0
所以 Emacs 被终止了,但是 Perl 脚本继续运行.. 但是,如果我运行
$ test.pl 'sleep 10'
我得到输出:
^Cexit_code = 0,信号 = 2
命令 'sleep 10' 因信号 2 而死
因此,如果我运行 sleep 10 而不是 emacs file.txt 它可以正常工作。
【问题讨论】:
-
你运行
/usr/bin/emacs,还是一些包装器?什么操作系统? -
@choroba 我正在使用 Ubuntu 14.04 并运行命令
/opt/emacs24.4/bin/emacs