我想在我的c程序中運行shell命令。但事情是,我不想讓我的程序等待命令執行。不需要讀取shell命令的輸出(無論如何它都不返回數據)所以基本上,這是可能的嗎?在c程序中運行shell命令
7
A
回答
5
5
當然,只是fork
和exec
:使用fork
創建一個新的進程,在子進程中,使用exec
開始與您的命令外殼。 execv
需要你通常給shell的參數。
您的代碼看起來是這樣的:當它死亡
pid_t child_pid = fork();
if (child_pid == 0)
{ // in child
/* set up arguments */
// launch here
execv("/bin/sh", args);
// if you ever get here, there's been an error - handle it
}
else if (child_pid < 0)
{ // handle error
}
子進程將發出一個SIGCHLD
信號。此代碼從POSIX標準(SUSv4)報價將處理的是:
static void
handle_sigchld(int signum, siginfo_t *sinfo, void *unused)
{
int status;
/*
* Obtain status information for the child which
* caused the SIGCHLD signal and write its exit code
* to stdout.
*/
if (sinfo->si_code != CLD_EXITED)
{
static char msg[] = "wrong si_code\n";
write(2, msg, sizeof msg - 1);
}
else if (waitpid(sinfo->si_pid, &status, 0) == -1)
{
static char msg[] = "waitpid() failed\n";
write(2, msg, sizeof msg - 1);
}
else if (!WIFEXITED(status))
{
static char msg[] = "WIFEXITED was false\n";
write(2, msg, sizeof msg - 1);
}
else
{
int code = WEXITSTATUS(status);
char buf[2];
buf[0] = '0' + code;
buf[1] = '\n';
write(1, buf, 2);
}
}
+0
exec不涉及shell。假設OP想要運行ls | grep -v你好'。這將與系統一起工作,但不適用於exec。 – 2011-04-10 01:17:48
+0
OP可以將這些傳遞給shell - 系統做同樣的事情(但在後臺執行另一個'fork'&'exec')。 – rlc 2011-04-10 01:22:21
1
嘗試這樣的代碼:
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char ** argv)
{
if (!fork())
{
execv("ls", {"myDir"}); /* Your command with arguments instead of ls. */
}
}
1
什麼簡單的功放與system ("command &")
的命令?
相關問題
- 1. 從C程序執行shell命令
- 2. 運行shell命令
- 3. 運行shell命令
- 4. 運行在C Linux命令++程序
- 5. C#:運行shell命令的問題
- 6. 使用shell命令更改正在運行的程序行爲
- 7. 執行shell命令並在C程序中讀取其輸出
- 8. 在C程序中使用sudo執行shell命令
- 9. 在Perl中運行Shell命令
- 10. 在spark-shell中運行啓動命令
- 11. 在Python中運行shell內置命令
- 12. 在shell腳本中運行命令
- 13. Shell - 在IF中運行一堆命令
- 14. 在ASP.NET中運行shell命令
- 15. 在C#控制檯應用程序中快速運行ADB Shell命令
- 16. 運行命令行程序
- 17. 通過C程序運行BASH命令
- 18. 從gulp運行shell命令
- 19. 從php運行shell命令
- 20. 運行shell命令去
- 21. Ansible Playbook運行Shell命令
- 22. 用PHP運行shell命令?
- 23. 從Django運行shell命令
- 24. shell運行hadoop命令
- 25. 在命令行運行Shell腳本
- 26. Shell腳本:在shell腳本中運行「exit」命令後執行命令
- 27. 如何在C中執行shell命令?
- 28. C++在shell中執行許多命令
- 29. bash命令在新的命令行窗口中運行程序
- 30. 在命令行程序中運行[不是真的]命令
順便說一句,如果你想運行一個shell命令或其他可執行文件,這並不重要。不管你使用'system()'還是'fork()/ exec()'方法,只需要一個可執行文件。也許你想相應地編輯你的問題的標題? – Jens 2011-04-12 21:29:26