簡體   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