使用 ssh 远程机器上的 Netcat
Netcat on remote machine using ssh
我试图通过使用 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() 调用中就会失败。
简答:
a & disown
(而不仅仅是 &)应该可以。
解释:
system()
产生一个 shell 只执行 一个 命令然后退出。 &
告诉 shell 将命令分叉到后台(意味着它不等待完成),但它仍然是 shell 的会话和进程组的一部分。当组长(shell)退出时,所有child人都被杀死。 disown
导致 shell 启动新进程组,child 进程现在由 init
拥有(第一个进程系统)。
“真实”答案:
这是关于编程的。您疯狂地分叉进程来完成 C 程序可以使用内置库调用轻松完成的事情(ssh
除外,但也有更好的方法)。继续阅读 BSD 套接字。
我试图通过使用 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() 调用中就会失败。
简答:
a & disown
(而不仅仅是 &)应该可以。
解释:
system()
产生一个 shell 只执行 一个 命令然后退出。 &
告诉 shell 将命令分叉到后台(意味着它不等待完成),但它仍然是 shell 的会话和进程组的一部分。当组长(shell)退出时,所有child人都被杀死。 disown
导致 shell 启动新进程组,child 进程现在由 init
拥有(第一个进程系统)。
“真实”答案:
这是关于编程的。您疯狂地分叉进程来完成 C 程序可以使用内置库调用轻松完成的事情(ssh
除外,但也有更好的方法)。继续阅读 BSD 套接字。