如何在fork()中使用execl()并杀死它
How can I use execl() inside fork() and kill it
我需要使用 C 执行一个二进制文件并使用 kill 终止它,但是该过程并没有在 fork 中使用 execl() 开始。我正在使用以下代码,
pid_t PID = fork();
if(PID == 0) {
execl("/home/pi/mjpg-streamer/mjpg_streamer -i "/home/pi/mjpg-streamer/input_uvc.so -n -f 15 -r 640x480" -o "/home/pi/mjpg-streamer/output_http.so -n -w /home/pi/mjpg-streamer/www "",(char*)0);
exit(1);
}
// Wait to kill child process
int p;
cin>>p;
kill(PID, 15); //Sends the SIGINT Signal to the process, telling it to stop.
任何人都可以帮助我解决这个问题...
谢谢。。。。
您正在向execl()
调用传递完整的命令行,这是无效的。
调用的参数是 1) 可执行文件的路径,2...n) 命令行组件(main 接收的 argv)和 n+1) 0 终止符。因此,根据您的需要,调用应如下所示:
execl("/home/pi/mjpg-streamer/mjpg_streamer", "mjpg_streamer", "-i", "/home/pi/mjpg-streamer/input_uvc.so -n -f 15 -r 640x480", "-o", "/home/pi/mjpg-streamer/output_http.so -n -w /home/pi/mjpg-streamer/www", (char*)0);
在 execl 调用后放置一个perror("execl:");
...如果达到错误,则参数仍然不是它们需要的参数(因为调用仍然无法执行新进程),并且错误可能有助于指示原因。
相关文章:
- execlp() 在 fork() 之后无法正常工作
- 在 fork() 之后,我在我的程序中不断得到相同的 pid
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- 为什么if(fork()==0){getpid()}和popen()进程返回相同的进程id
- While循环在fork和execvp调用后没有继续
- fork(),在C中共享内存和指针
- fork/pipes和运行多个程序
- 如何在execl中使用标准输入'<'?
- Gdb 未加载要在 fork 使用的源文件
- fork() 无法使用 Cygwin
- PID 不使用 fork() 定义类型
- 为什么我应该使用 fork() 来守护我的进程?
- 修改跨 fork() 的指针中的数据
- iwlist 在使用 execl 调用时尝试扫描所有接口
- C++ fork() 和 execl() 调用 (Linux) 后无法识别命令
- execl() 的参数传递到哪里
- Linux fork - execl,执行的进程变成僵尸
- 如何在fork()中使用execl()并杀死它
- c++fork,不需要等待,即可解压execl
- C系统调用pipe, fork和execl