问题标签 [execvp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3935 浏览

c - execvp 返回后,为什么我的程序没有从中断的地方继续?

我有一个像这样作为子线程运行的代码块:

当我使用 someVar == 1 运行程序时,我知道 _exit(0) 调用会杀死我的线程。但是,当它设置为 0 时,为什么程序在 execvp() 调用后不继续执行 printf 语句?

0 投票
5 回答
22771 浏览

c - 尝试在 C 中使用 execvp() 和 unix 中的用户输入

我正在尝试制作一个提示用户输入命令的程序,然后使用 exec 执行该命令。

例如,如果他们给了我“ls -la”,我将不得不执行该命令。我试过以下代码:

但是,当我尝试以下运行时,它给了我一个“分段错误”

有任何想法吗?

0 投票
3 回答
4736 浏览

c - execv, wait, Unix programming, How to wait for a child

Hi I'm working on a unix shell and I'm running into two problems. I was wondering if any of you could help me out. My first problem is that the shell is not waiting for the child process to terminate. I can actually go type more commands while the child process is running. My second problems is in the following two lines. I'm not getting any display on the shell.

I have the following method to execute a process entered by the user: i.e. firefox, ls -a, etc

This is where I call the execute command. It works fine and launches a process, but it doesn't wait for it to finish.

Do you guys have any idea what I might be doing wrong? Thanks I really appreciate any time you take to help me on this.

0 投票
1 回答
1750 浏览

c++ - 如何让 forkpty/execvp() 正确处理重定向和其他 bash-isms?

我有一个 GUI C++ 程序,它从用户那里获取一个 shell 命令,调用 forkpty() 和 execvp() 在子进程中执行该命令,而父 (GUI) 进程读取子进程的 stdout/stderr 输出和在 GUI 中显示它。

这一切都很好(在 Linux 和 MacOS/X 下)。例如,如果用户输入“ls -l /foo”,GUI 将显示 /foo 文件夹的内容。

但是,不处理诸如输出重定向之类的 bash 细节。例如,如果用户输入“echo bar > /foo/bar.txt”,子进程将输出文本“bar > /foo/bar.txt”,而不是将文本“bar”写入文件“/ foo/bar.txt”。

这大概是因为 execvp() 直接运行可执行命令“echo”,而不是运行 /bin/bash 并将用户的命令交给按摩/预处理。

我的问题是,为了使系统的行为与用户在 bash 提示符下键入他的字符串完全一样,要使用什么正确的子进程调用?我尝试使用 /bin/bash 调用来包装用户的命令,如下所示:/bin/bash -c the_string_the_user_entered,但这似乎不起作用。有什么提示吗?

ps 只调用 system() 不是一个好的选择,因为它会导致我的 GUI 阻塞,直到子进程退出,并且一些子进程可能不会退出很长时间(如果有的话!)

0 投票
4 回答
10041 浏览

c - 在“execvp()”之后控制是否返回?

“execvp()”将当前程序替换为要执行的程序(当然在同一个进程上下文中)。因此,例如,在 execvp() 之后进行任何 printf() 调用都将不起作用。这就是文档所说的,我也已经验证过了。

但是,为什么需要 _exit() ..?控制是否会返回到 execvp() 后的语句?

我将不胜感激任何指示。

谢谢

0 投票
1 回答
162 浏览

c - char ** nargv 为空但不知道为什么

我正在尝试做一些非常简单的事情:用我想在 C 中的 execvp 调用中使用的参数填充一个 char**。

这就是我的做法:

输出给了我:

这听起来不错(nargv 填充正确,至少我是这么认为的)> 但是当我执行 execvp("command",nargv) 时,我的参数没有通过。怎么了 ?我试图玩 gdb 没有成功。

问候

0 投票
4 回答
5997 浏览

c - 在 main 中等待 execvp

  1. 假设我已经正确传递了 cmdName 和 cmdParam 参数,我该如何等待 execvp 创建的进程完成,然后再继续执行 main()?
  2. execvp() 是否创建了一个作为新 fork() 进程的子进程的进程?
0 投票
2 回答
5696 浏览

shell - C - 将未知命令传递给 execvp()

我正在编写一个假外壳,在其中创建一个子进程,然后调用 execvp()。在普通 shell 中,当我输入未知命令(例如“hello”)时,它会返回“hello: Command not found”。但是,当我将 hello 传递给 execvp() 时,默认情况下它不会返回任何错误,而是继续运行我的程序的其余部分,就像什么都没发生一样。找出是否实际上没有运行的最简单方法是什么?这是我的代码:

我知道如果 corpse < 0,那么它是一个未知命令,但是我的代码中还有其他条件未列出,我不想等待(例如,如果在命令末尾输入 &)。有什么建议么?

0 投票
2 回答
953 浏览

c++ - execvp() 导致 EXC_SOFTWARE 和奇怪的 cin.getline 循环?

我在 Mac OSX 10.6.6 和 XCode 3.2.4 上运行一些代码,并且我有一些非常标准的代码:fork(), if pid == 0 then execvp with a command and the args (args include the command as the数组中的第一个元素,并且数组以 null 结尾)。

我们将在我的操作系统课上讨论这个问题,我们的任务是编写一个简单的 shell。运行带有参数和开关的命令,包括重定向(< 和 >)和管道(|)。我遇到了几个问题。

1)有时我在调试时收到 EXC_SOFTWARE 信号(到目前为止,如果我在 XCode 之外运行应用程序,我还没有收到它,但我是 Mac 新手,不知道如果我这样做会是什么样子)

2) 有时,下一个命令的 getline 会变成垃圾,似乎是由其他 couts 打印的。这开始永远循环,呈指数级中断。我已经测试过在每个提示符下打印 getpid() 并且只有开始过程会打印出这些,我似乎没有意外的“叉子炸弹”。

这是我到目前为止所拥有的:

这正是我所拥有的,您应该能够剪切、粘贴和构建。

我在 C++ 方面不是最好的,当我不删除时可能会出现内存泄漏,split但我的主要关注点是 EXC_SOFTWARE 信号,看看我在循环问题上做错了什么。有什么想法吗?

编辑:

分配需要非常有限的错误检查,我假设所有输入都是正确的。正确我的意思是正确格式化和限制我的应用程序运行命令,即没有奇怪的空间计数,没有 & 运行异步,没有多管道命令等。

0 投票
1 回答
2407 浏览

c - 构建一个基本的 shell,更具体地说是使用 execvp()

在我的程序中,我接受用户输入并将其解析为二维字符数组。数组声明为:

我正在使用 fgets 来获取用户输入并使用 sscanf 对其进行解析。这一切都像我认为的那样有效。

在此之后,我想将 parsedText 传递给 execvp,parsedText[0] 应该包含路径,如果提供了任何参数,那么它们应该在 parsedText[1] 到 parsedText[10] 中。

execvp(parsedText[0], parsedText[1]) 有什么问题?

可能值得一提的是,如果我只提供诸如“ls”之类的命令而没有任何参数,它似乎工作得很好。

这是我的代码: