繁体   English   中英

Linux / Windows上的线程/进程比较

[英]Threads/Process comparison on Linux/Windows

我在Windows中使用线程和进程方面有一些经验。

有人可以解释一下,是否有可能将Windows中的线程和进程映射到Linux中的线程和进程?

这意味着Windows中的线程== Linux中的线程? ->有道理吗? Windows中的进程== Linus中的进程? ->有道理吗?

如果相同,我在Windows中有CreateThread()和CreateProcess()调用,在Linux中等效的调用是什么?

我已经阅读了SO中的一些帖子,但大多数都没有消除我的疑虑。

如果我通过一些简单的例子(C编程)得到一些解释,那将是很好的。

好吧,在Linux中有满足您目的的等效调用,但是它们至少在处理机制方面有所不同。

  1. 对于线程,可以使用pthread_create 除了某些参数不同外,它的工作方式与CreateThread非常相似。 应该很容易使用。 这是一个很好的教程: https : //computing.llnl.gov/tutorials/pthreads/

  2. 为了启动外部过程而模拟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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM