Linux 使用konsole通过Perl模拟终端
使用此命令时出现问题Linux 使用konsole通过Perl模拟终端,linux,perl,raspberry-pi,konsole,Linux,Perl,Raspberry Pi,Konsole,使用此命令时出现问题 system("konsole --new-tab --workdir<dir here> -e perlprogram.pl &"); 我之所以要这样做,是因为mpg321会暂停主perl脚本。所以我想在另一个终端窗口打开它就可以了。但当我运行第一个脚本时,它所做的只是打开一个新选项卡,什么也不做 我是否正确使用konsole 我是否正确使用了konsole 可能不会,但这要视情况而定。这个问题可以分解为两个问题: 如何实现并发性,以便在执行外部命令
system("konsole --new-tab --workdir<dir here> -e perlprogram.pl &");
我之所以要这样做,是因为mpg321会暂停主perl脚本。所以我想在另一个终端窗口打开它就可以了。但当我运行第一个脚本时,它所做的只是打开一个新选项卡,什么也不做
我是否正确使用konsole
我是否正确使用了konsole
可能不会,但这要视情况而定。这个问题可以分解为两个问题:
konsole
fork | | exec('new-program')
开始,到system'new-program&
,甚至打开
system
将调用操作系统的标准shell,并执行您提供的命令。如果您提供多个参数,则不会执行shell转义,并且指定的程序将直接执行。(到目前为止,exec
函数具有相同的接口)<代码>系统
返回一个数字,指定命令是否正确运行:
system("my-command", "arg1") == 0
or die "failed my-command: $?";
请参阅perlfunc-f system
,以了解此返回值的含义的完整信息
如果成功,exec
将不会返回,但会将您的进程变形为执行新程序
fork
将进程一分为二,并将子进程和进程作为相等的副本执行。它们只是在fork
的返回值上有所不同:父对象获取子对象的PID;这孩子得零分。因此,下面将异步执行一个命令,并让主脚本无需进一步延迟即可执行
my @command = ("mpg321", "song.mp3");
fork or do {
# here we are in the child
local $SIG{CHLD} = 'IGNORE'; # don't pester us with zombies
# set up environment, especially: silence the child. Skip if program is well-behaved.
open STDIN, "<", "/dev/null" or die "Can't redirect STDIN";
open STDOUT, ">", "/dev/null" or die "Can't redirect STDOUT";
exec {$command[0]} @command;
# won't ever be executed on success
die qq[Couldn't execute "@command"];
};
对我来说很好(打开一个新选项卡,显示“hello”,当我按enter键时关闭)。那里的最后一条读线将保持选项卡打开,直到我关闭它。您可以通过--hold
将选项卡保持打开状态,直到执行-e
命令。这允许您查看否则将消失的任何错误消息
我是否正确使用了konsole
可能不会,但这要视情况而定。这个问题可以分解为两个问题:
konsole
fork | | exec('new-program')
开始,到system'new-program&
,甚至打开
system
将调用操作系统的标准shell,并执行您提供的命令。如果您提供多个参数,则不会执行shell转义,并且指定的程序将直接执行。(到目前为止,exec
函数具有相同的接口)<代码>系统
返回一个数字,指定命令是否正确运行:
system("my-command", "arg1") == 0
or die "failed my-command: $?";
请参阅perlfunc-f system
,以了解此返回值的含义的完整信息
如果成功,exec
将不会返回,但会将您的进程变形为执行新程序
fork
将进程一分为二,并将子进程和进程作为相等的副本执行。它们只是在fork
的返回值上有所不同:父对象获取子对象的PID;这孩子得零分。因此,下面将异步执行一个命令,并让主脚本无需进一步延迟即可执行
my @command = ("mpg321", "song.mp3");
fork or do {
# here we are in the child
local $SIG{CHLD} = 'IGNORE'; # don't pester us with zombies
# set up environment, especially: silence the child. Skip if program is well-behaved.
open STDIN, "<", "/dev/null" or die "Can't redirect STDIN";
open STDOUT, ">", "/dev/null" or die "Can't redirect STDOUT";
exec {$command[0]} @command;
# won't ever be executed on success
die qq[Couldn't execute "@command"];
};
对我来说很好(打开一个新选项卡,显示“hello”,当我按enter键时关闭)。那里的最后一条读线将保持选项卡打开,直到我关闭它。您可以通过--hold
将选项卡保持打开状态,直到执行-e
命令。这允许您查看否则将消失的任何错误消息