【问题标题】:Detach process to start firefox in C分离进程以在 C 中启动 firefox
【发布时间】:2020-10-11 23:17:35
【问题描述】:

这个 C 程序的目的是让我更容易打开与我在学校的每个班级相对应的网站。当我在终端(kitty)中运行该代码时,它通常可以完美运行,但是当我将它绑定到一个键时它会失败。

我在 Linux 上,我正在使用 XFCE4 的默认键绑定实用程序绑定键。我的键绑定在我的终端模拟器中打开可执行文件kitty

在我的设置中,我将 PageUp 绑定到以下命令:

kitty bash -c "/home/carter/Code/classes/classes"

它应该执行以下操作(按顺序):

  1. 显示我可以从中选择的课程列表
  2. 询问 1-7 的数字
  3. 在firefox中打开对应类的链接
  4. 停止执行并允许 kitty 关闭

这是代码(为了匿名,我已将链接和类名更改为示例):

#include <stdio.h>
#include <string.h>

int main() {
    char classNames[7][15] = {"Class 1", "Class 2", "Class 3", "Class 4", "Class 5", "Class 6", "Class 7"};
    char classLinks[7][60] = {"http://class1.com", "http://class2.com", "http://class3.com", "http://class4.com", "http://class5.com", "http://class6.com", "http://class7.com"};
    
    for (int i = 0; i < sizeof(classNames)/15; i++) { // 15 bytes to each string
        printf("%d) ", i+1);
        printf(classNames[i]);
        printf("\n");
    }

    int classIndex;
    printf("\nClasses to open: ");
    
    scanf("%d", &classIndex);  

    char cmd[70];

    strcpy(cmd, "firefox ");
    strcat(cmd, classLinks[classIndex-1]);
    //strcat(cmd, " &"); // spawn new process ?
    
    printf(cmd);
    printf("\n");

    system(cmd);
    //popen(cmd, "w") // ???
}

这是我尝试过的一些事情(请记住,当我直接在终端中执行它们时,我很确定所有这些都有效。当我尝试将可执行文件绑定到键时它们会中断):

  1. firefox {URL}system() 格式运行命令

起初这似乎可行,但在代码执行完成后它使我的终端窗口保持打开状态。当我关闭 kitty 时,它会关闭 firefox。

  1. firefox {URL} &amp; 的格式运行它以使用system() 生成一个新进程

这不起作用。它显示类并正确读取我的输入,但之后它没有做任何事情。 Firefox 打不开,kitty 关闭。

  1. popen("firefox {URL}", "w") 一样运行它

当我这样做时,我得到与 #2 相同的结果。

我正在尝试进行某种系统调用以正确生成一个新的 firefox 进程。知道发生了什么吗?很抱歉提供所有这些背景信息。

【问题讨论】:

    标签: c linux firefox xfce


    【解决方案1】:

    没关系。经过一番摆弄,我找到了一个适合我的解决方案。

    我最终使用了带有f 标志的setsid 命令:

    strcpy(cmd, "setsid -f firefox ");
    strcat(cmd, classLinks[classIndex-1]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多