[英]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.