Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用konsole通过Perl模拟终端_Linux_Perl_Raspberry Pi_Konsole - Fatal编程技术网

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
  • 1.并发性 有多种方法可以做到这一点。从
    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
  • 1.并发性 有多种方法可以做到这一点。从
    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
    命令。这允许您查看否则将消失的任何错误消息