用popen()执行缓慢的进程

时间:2016-11-21 21:56:46

标签: c popen nmap

我正在使用nmap和C创建一个简单的网络扫描功能。我想使用popen()来执行nmap,但是nmap需要将近30秒才能完成,因为我正在扫描各种IP。

那么,有没有办法检查命令何时执行完毕?我不希望我的C代码在系统调用时挂起,而是我想在循环中检查一个标志或什么东西,它会知道popen / nmap何时完成,所以我的C程序的其他部分不会来停了下来。这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

我可以想到两种直接的方式来做到这一点

  1. 你可以直接fork()然后建立一种沟通这两个过程的方法,这将非常困难,因为IPC不是一件容易的事。

  2. 您可以使用pthread_create()创建一个新线程,并在那里调用popen(),这将更容易,您可以通过使用适当的锁定机制来防止竞争条件在线程之间共享数据

答案 1 :(得分:0)

您可以使用fork(硬模式)

进行多重处理

或者您可以使用pthread(easymode)

来使用多线程

任何一个允许你一次做两件事。多处理很难,因为您必须担心内部处理通信(管道),而您尝试做的2个任务无法共享内存。

多线程更容易,因为您只需要包含库(-lpthread),然后指定单独线程上的函数。