问题标签 [execv]
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.
c++ - 如何获得 execv 的返回值?
我对 C++ 真的很陌生,我正在尝试从以下位置获取输出:
我正在使用 C++ 和 RHEL 6 进行编程。
像 FTP 客户端一样,我想从我的外部运行程序中获取所有状态更新。有人可以告诉我我该怎么做吗?
c - 如何从 Linux 中的分叉子进程立即返回?
我不熟悉linux C开发。
我的代码:
我想要做的是立即从子进程中启动的新进程返回。
因为在当前程序中,execv (workdir , args);
不会返回。(我需要开始一个长时间运行的过程)。
我想做的是开始这个长期运行的过程并立即在我的 C 代码中返回,以便我的 C 程序可以退出。
我怎样才能做到这一点?也许让我开始的新子进程成为一个守护进程,如何通过 api 调用来做到这一点?
c - 如何让gdb跟随execv?尽管“follow-exec-mode”无法正常工作
我写了两个简单的程序:
和
我已经用 gcc -g 将它们编译到相应的输出文件中。我正在使用 gcc (Ubuntu/Linaro 4.4.4-14ubuntu5.1) 4.4.5 运行 Ubuntu 10.10。
当我使用 GNU gdb (GDB) 7.2-ubuntu 调试第一个程序时,我可以一直执行到第一个 execv 语句,但是这两个文件只是继续运行。即使我将 follow-exec-mode 设置为 new,我也无法进入第二个程序。当我设置 catch exec 时,gdb 会在每次调用 execv 时停止(因为第二个程序没有链接源,我无法退出 gdb,因为它有点挂起!?),但我不能跨过调用“新”(因为 exec 替换进程)劣质程序。
那么如何做到这一点呢?一定有办法进入新流程吧?难道我做错了什么?
干杯
c++ - prctl(PR_SET_PDEATHSIG, SIGNAL) 在父线程退出时调用,而不是父进程退出
我有一个分叉给子进程的进程。如果父进程存在,则子进程不应该存在。
所以,如果父进程死了,我会调用::prctl(PR_SET_PDEATHSIG, SIGKILL)
子进程来杀死它。
最终发生的是父线程调用pthread_exit
,并且该线程最终成为杀死子进程的催化剂。
这是我的代码:
父级.cpp:
孩子.cpp:
在命令行上运行以下命令:
同时,运行以下命令查找 child 的状态:
孩子没了。如果您在 child 中取出 prctl 调用,它不会失效。
prctl 手册页似乎描述了这个调用应该SIGKILL
在父进程死亡时调用,而不是父线程。
当父进程而不是父线程死亡时,有什么方法可以让 prctl 杀死子进程?
c++ - 如何在没有警告的情况下使用 execv()?
我正在使用 GCC 4.2 开发 MacOS-X Lion。此代码有效,但我收到一条警告,我想修复:
警告:不推荐将字符串常量转换为 'char*'
我不希望警告被压制,我根本不想拥有它。它是 C++ 代码,而不是 C。
使用 char *const(因此正是 execv() 所需的类型)仍然会产生警告。
谢谢你。
c - execv 如何从管道获取输出?
参考旧的作业问题:/* implementing "/usr/bin/ps -ef | /usr/bin/more" */
使用管道。
将 fd 重定向到标准输出后,execv 如何从中读取。在执行命令之前它是否内置在 execv 中,它会从标准输入中读取?我无法理解这个概念。
linux - linux下的守护进程无法使用execv启动应用程序
我们有一个在 Fedora 16 下运行的命令和控制守护程序,它提供各种服务,包括启动我们的一个辅助应用程序。这已经为我们工作了很长一段时间。
事实上,它仍然有效 - 在某些系统上。
守护进程分叉(成功),然后调用 execv()。
设置在另一个系统上测试,突然失败,execv()失败返回127。
两个系统都在运行 Fedora 16,虽然有问题的是 3.3.7-1.fc16.x86_64 而另一个一切正常的系统是运行 3.4.2-1.fc16.x86_64
如果我停止守护程序并将其作为独立应用程序运行,则整个过程运行良好。
所有在 execv() 和相关文档中的搜索都无法显示 127 错误代码,到目前为止我唯一的猜测是 Linux 'Command not found' 错误。不知道这意味着什么使解决问题变得困难。
谁能告诉我 127 返回码是什么意思?
谢谢!
c - 用C写一个shell,不返回任何东西
我运行我的shell,它提示:“ Shell>
”。我输入一个命令,例如ls
,它只是创建一个新行,Shell>
再次显示“”。
知道为什么它似乎没有击中execv
吗?
c - 从 cmd 行读取命令,并在 C 中执行它们
我正在编写一个程序来从命令行(linux/unix 命令)获取用户输入,并在我的程序中执行它们。
到目前为止我的步骤:
- 询问用户输入的命令数
- fork() 创建子进程
- 输出子 PID 和父 PID
- 允许用户输入每个命令,将每个输入读入 argv 的索引
- 使用 execv 在 argv 中运行每个命令
主要问题是当它执行时,它只是执行 execv 命令中的“bin/ls/”。
这是运行我的程序的示例输出:
输入命令数:2
孩子的 PID 是 3487。父母的 PID 是 3485
输入 UNIX 命令:ls
输入 UNIX 命令:-al
文件列表,就像在 CMD 上键入“LS”一样LINE
处理完成。
这是我的源代码:
c - 使用 execv(C 语言)从 linux 命令提示符运行命令
到目前为止,我唯一感到困惑的部分是如何使用第一个参数设置 execv 作为当前工作目录。我已经尝试了两个“。” 和“~”,都没有对屏幕执行任何操作;“/”也一样。和“/~”。我对如何让 execv 运行这样的事情感到困惑:
并让它在当前目录或与文件所在的目录相同的目录中执行程序执行后的命令(存储在 argv 中)(这将根据使用它的人而有所不同。)
我的代码:
一些示例输出: