我试图通过使用 ssh 运行 netcat,但似乎我的代码在我的 C 代码中总是失败。以下是我按此顺序使用 system() 执行的命令。
system("ssh machine 'nc -l 61001|dd bs=64M of=temp' &")
system("/bin/dd if=filename bs=64M|nc IP_address 61001")
我注意到第一个命令工作正常,因为临时文件是在远程机器上创建的。第二个 dd 命令失败并指出已在远程机器上写入 0 个字节。这些命令在从终端执行时可以正常工作,但一旦我将其放入 C 中的 system() 调用中就会失败。
最佳答案
简答:
& disown
(而不仅仅是 &)应该可以。
说明:
system()
产生一个只执行一个 命令然后退出的 shell。 &
告诉 shell 将命令 fork 到后台(意味着它不等待命令完成),但它仍然是 shell 的 session 和进程组的一部分。当组长(shell)退出时,所有 child 都被杀死。 disown
导致 shell 启动新进程组,子进程现在由 init
(系统中的第一个进程)拥有。
“真实”答案:
这是关于编程的。您疯狂地 fork 进程来完成 C 程序可以使用内置库调用轻松完成的事情(ssh
除外,但也有更好的方法)。去阅读 BSD sockets。
关于c++ - 使用 ssh 远程机器上的 Netcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31659439/