[英]Threads/Process comparison on Linux/Windows
我在Windows中使用线程和进程方面有一些经验。
有人可以解释一下,是否有可能将Windows中的线程和进程映射到Linux中的线程和进程?
这意味着Windows中的线程== Linux中的线程? ->有道理吗? Windows中的进程== Linus中的进程? ->有道理吗?
如果相同,我在Windows中有CreateThread()和CreateProcess()调用,在Linux中等效的调用是什么?
我已经阅读了SO中的一些帖子,但大多数都没有消除我的疑虑。
如果我通过一些简单的例子(C编程)得到一些解释,那将是很好的。
好吧,在Linux中有满足您目的的等效调用,但是它们至少在处理机制方面有所不同。
对于线程,可以使用pthread_create
。 除了某些参数不同外,它的工作方式与CreateThread
非常相似。 应该很容易使用。 这是一个很好的教程: https : //computing.llnl.gov/tutorials/pthreads/
为了启动外部过程而模拟CreateProcess
并不是那么简单。 您将需要著名的fork/exec
组合。 首先,您需要在主流程中调用fork
来生成子流程。 通过复制初始过程来创建此子级。 然后,您可以通过检查fork
返回的值来控制流:
int rv = fork(); // new process was spawned here. The following code is executed // by both processes. if(rv == 0) { // we are in the child process } else { // we are in the parent }
基本上,对于孩子来说, rv
将为0,对于父母,孩子的pid将为0。 希望我到目前为止还没有失去你。 :)
继续,您将需要调用exec
函数家族之一来启动外部进程:
int rv = fork(); // new process was spawned here. The following code is executed // by both processes. if(rv == 0) { execl("/bin/ls", "ls", NULL); // start the ls process } else { // we are in the parent }
在上面的示例中,我正在启动/bin/ls
外部进程,该进程将打印当前文件夹的内容。
这是一个简单的完整示例: http : //flinflon.brandonu.ca/dueck/2001/62306/Processes/Unix%20Examples.htm
现在,您可能想知道为什么首先需要调用fork
以及为什么execl
还不够。 这是因为execl
调用的程序终止后,当前进程也终止了,您不希望在主进程中发生这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.