linux線程操作命令 linux線程詳解

linux下的命令都是干什么用的?

前三個和最后一個是兩個類型。前三個主要是Linux用來創(chuàng)建新的進(jìn)程(線程)而設(shè)計的,exec()系列函數(shù)則是用來用指定的程序替換當(dāng)前進(jìn)程的所有內(nèi)容。所以exec()系列函數(shù)經(jīng)常在前三個函數(shù)使用之后調(diào)用,來創(chuàng)建一個全新的程序運行環(huán)境。Linux用init進(jìn)程啟動其他進(jìn)程的過程一般都是這樣的。

網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)站,高端網(wǎng)頁制作,對成都圍欄護(hù)欄等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計,網(wǎng)站優(yōu)化推廣哪家好,專業(yè)網(wǎng)站推廣優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。

下面說fork、vfork和clone三個函數(shù)。這三個函數(shù)分別調(diào)用了sys_fork、sys_vfork、sys_clone,最終都調(diào)用了do_fork函數(shù),差別在于參數(shù)的傳遞和一些基本的準(zhǔn)備工作不同。可見這三者最終達(dá)到的最本質(zhì)的目的都是創(chuàng)建一個新的進(jìn)程。在這里需要明確一下,Linux內(nèi)核中沒有獨立的“線程”結(jié)構(gòu),Linux的線程就是輕量級進(jìn)程,換言之基本控制結(jié)構(gòu)和Linux的進(jìn)程是一樣的(都是通過struct task_struct管理)。

fork是最簡單的調(diào)用,不需要任何參數(shù),僅僅是在創(chuàng)建一個子進(jìn)程并為其創(chuàng)建一個獨立于父進(jìn)程的空間。fork使用COW(寫時拷貝)機制,并且COW了父進(jìn)程的??臻g。

vfork是一個過時的應(yīng)用,vfork也是創(chuàng)建一個子進(jìn)程,但是子進(jìn)程共享父進(jìn)程的空間。在vfork創(chuàng)建子進(jìn)程之后,父進(jìn)程阻塞,直到子進(jìn)程執(zhí)行了exec()或者exit()。vfork最初是因為fork沒有實現(xiàn)COW機制,而很多情況下fork之后會緊接著exec,而exec的執(zhí)行相當(dāng)于之前fork復(fù)制的空間全部變成了無用功,所以設(shè)計了vfork。而現(xiàn)在fork使用了COW機制,唯一的代價僅僅是復(fù)制父進(jìn)程頁表的代價,所以vfork不應(yīng)該出現(xiàn)在新的代碼之中。在Linux的manpage中隊vfork有這樣一段話:It is rather unfortunate that Linux revived this specter from the past. The BSD man page states: "This system call will be eliminated when proper system sharing mechanisms are implemented. Users should not depend on the memory sharing semantics of vfork() as it will, in that case, be made synonymous to fork(2)."

clone是Linux為創(chuàng)建線程設(shè)計的(雖然也可以用clone創(chuàng)建進(jìn)程)。所以可以說clone是fork的升級版本,不僅可以創(chuàng)建進(jìn)程或者線程,還可以指定創(chuàng)建新的命名空間(namespace)、有選擇的繼承父進(jìn)程的內(nèi)存、甚至可以將創(chuàng)建出來的進(jìn)程變成父進(jìn)程的兄弟進(jìn)程等等。clone和fork的調(diào)用方式也很不相同,clone調(diào)用需要傳入一個函數(shù),該函數(shù)在子進(jìn)程中執(zhí)行。此外,clone和fork最大不同在于clone不再復(fù)制父進(jìn)程的棧空間,而是自己創(chuàng)建一個新的。

關(guān)于Linux命令的介紹,看看《linux就該這么學(xué)》,具體關(guān)于這一章地址3w(dot)linuxprobe/chapter-02(dot)html

基本linux命令

基本linux命令有哪些呢?

1、ls命令

就是 list 的縮寫,通過 ls 命令不僅可以查看 linux 文件夾包含的文件,而且可以查看文件權(quán)限(包括目錄、文件夾、文件權(quán)限)查看目錄信息等等。

常用參數(shù)搭配:

ls -a 列出目錄所有文件,包含以.開始的隱藏文件

ls -A 列出除.及..的其它文件

ls -r 反序排列

ls -t 以文件修改時間排序

ls -S 以文件大小排序

ls -h 以易讀大小顯示

ls -l 除了文件名之外,還將文件的權(quán)限、所有者、文件大小等信息詳細(xì)列出來

實例:

(1) 按易讀方式按時間反序排序,并顯示文件詳細(xì)信息

ls -lhrt

(2) 按大小反序顯示文件詳細(xì)信息

ls -lrS

(3)列出當(dāng)前目錄中所有以"t"開頭的目錄的詳細(xì)內(nèi)容

ls -l t*

(4) 列出文件絕對路徑(不包含隱藏文件)

ls | sed "s:^:`pwd`/:"

(5) 列出文件絕對路徑(包含隱藏文件)

find $pwd -maxdepth 1 | xargs ls -ld

2、cd 命令

cd(changeDirectory) 命令語法:

cd [目錄名]

說明:切換當(dāng)前目錄至 dirName。

實例:

(1)進(jìn)入要目錄

cd /

(2)進(jìn)入 "home" 目錄

cd ~

(3)進(jìn)入上一次工作路徑

cd -

(4)把上個命令的參數(shù)作為cd參數(shù)使用。

cd !$

3、pwd 命令

pwd 命令用于查看當(dāng)前工作目錄路徑。

實例:

(1)查看當(dāng)前路徑

pwd

(2)查看軟鏈接的實際路徑

pwd -P

4、mkdir 命令

mkdir 命令用于創(chuàng)建文件夾。

可用選項:

-m: 對新建目錄設(shè)置存取權(quán)限,也可以用 chmod 命令設(shè)置;

-p: 可以是一個路徑名稱。此時若路徑中的某些目錄尚不存在,加上此選項后,系統(tǒng)將自動建立好那些尚不在的目錄,即一次可以建立多個目錄。

實例:

(1)當(dāng)前工作目錄下創(chuàng)建名為 t的文件夾

mkdir t

(2)在 tmp 目錄下創(chuàng)建路徑為 test/t1/t 的目錄,若不存在,則創(chuàng)建:

mkdir -p /tmp/test/t1/t

5、rm 命令

刪除一個目錄中的一個或多個文件或目錄,如果沒有使用 -r 選項,則 rm 不會刪除目錄。如果使用 rm 來刪除文件,通常仍可以將該文件恢復(fù)原狀。

rm [選項] 文件…

實例:

(1)刪除任何 .log 文件,刪除前逐一詢問確認(rèn):

rm -i *.log

(2)刪除 test 子目錄及子目錄中所有檔案刪除,并且不用一一確認(rèn):

rm -rf test

(3)刪除以 -f 開頭的文件

rm -- -f*

6、rmdir 命令

從一個目錄中刪除一個或多個子目錄項,刪除某目錄時也必須具有對其父目錄的寫權(quán)限。

注意:不能刪除非空目錄

實例:

(1)當(dāng) parent 子目錄被刪除后使它也成為空目錄的話,則順便一并刪除:

rmdir -p parent/child/child11

7、mv 命令

移動文件或修改文件名,根據(jù)第二參數(shù)類型(如目錄,則移動文件;如為文件則重命令該文件)。

當(dāng)?shù)诙€參數(shù)為目錄時,第一個參數(shù)可以是多個以空格分隔的文件或目錄,然后移動第一個參數(shù)指定的多個文件到第二個參數(shù)指定的目錄中。

實例:

(1)將文件 test.log 重命名為 test1.txt

mv test.log test1.txt

(2)將文件 log1.txt,log2.txt,log3.txt 移動到根的 test3 目錄中

mv llog1.txt log2.txt log3.txt /test3

(3)將文件 file1 改名為 file2,如果 file2 已經(jīng)存在,則詢問是否覆蓋

mv -i log1.txt log2.txt

(4)移動當(dāng)前文件夾下的所有文件到上一級目錄

mv * ../

8、cp 命令

將源文件復(fù)制至目標(biāo)文件,或?qū)⒍鄠€源文件復(fù)制至目標(biāo)目錄。

注意:命令行復(fù)制,如果目標(biāo)文件已經(jīng)存在會提示是否覆蓋,而在 shell 腳本中,如果不加 -i 參數(shù),則不會提示,而是直接覆蓋!

-i 提示

-r 復(fù)制目錄及目錄內(nèi)所有項目

-a 復(fù)制的文件與原文件時間一樣

實例:

(1)復(fù)制 a.txt 到 test 目錄下,保持原文件時間,如果原文件存在提示是否覆蓋。

cp -ai a.txt test

(2)為 a.txt 建議一個鏈接(快捷方式)

cp -s a.txt link_a.txt

9、cat 命令

cat 主要有三大功能:

1.一次顯示整個文件:

cat filename

2.從鍵盤創(chuàng)建一個文件:

cat filename

只能創(chuàng)建新文件,不能編輯已有文件。

3.將幾個文件合并為一個文件:

cat file1 file2 file

-b 對非空輸出行號

-n 輸出所有行號

實例:

(1)把 log2012.log 的文件內(nèi)容加上行號后輸入 log2013.log 這個文件里

cat -n log2012.log log2013.log

(2)把 log2012.log 和 log2013.log 的文件內(nèi)容加上行號(空白行不加)之后將內(nèi)容附加到 log.log 里

cat -b log2012.log log2013.log log.log

(3)使用 here doc 生成新文件

cat log.txt EOF

Hello

World

PWD=$(pwd)

EOF

ls -l log.txt

cat log.txt

Hello

World

PWD=/opt/soft/test

(4)反向列示

tac log.txt

PWD=/opt/soft/test

World

Hello

10、more 命令

功能類似于 cat, more 會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示。

命令參數(shù):

+n 從笫 n 行開始顯示

-n 定義屏幕大小為n行

+/pattern 在每個檔案顯示前搜尋該字串(pattern),然后從該字串前兩行之后開始顯示

-c 從頂部清屏,然后顯示

-d 提示“Press space to continue,’q’ to quit(按空格鍵繼續(xù),按q鍵退出)”,禁用響鈴功能

-l 忽略Ctrl+l(換頁)字符

-p 通過清除窗口而不是滾屏來對文件進(jìn)行換頁,與-c選項相似

-s 把連續(xù)的多個空行顯示為一行

-u 把文件內(nèi)容中的下畫線去掉

常用操作命令:

Enter 向下 n 行,需要定義。默認(rèn)為 1 行

Ctrl+F 向下滾動一屏

空格鍵 向下滾動一屏

Ctrl+B 返回上一屏

= 輸出當(dāng)前行的行號

:f 輸出文件名和當(dāng)前行的行號

V 調(diào)用vi編輯器

!命令 調(diào)用Shell,并執(zhí)行命令

q 退出more

實例:

(1)顯示文件中從第3行起的內(nèi)容

more +3 text.txt

(2)在所列出文件目錄詳細(xì)信息,借助管道使每次顯示 5 行

ls -l | more -5

按空格顯示下 5 行。

11、less 命令

less 與 more 類似,但使用 less 可以隨意瀏覽文件,而 more 僅能向前移動,卻不能向后移動,而且 less 在查看之前不會加載整個文件。

常用命令參數(shù):

-i 忽略搜索時的大小寫

-N 顯示每行的行號

-o 文件名 將less 輸出的內(nèi)容在指定文件中保存起來

-s 顯示連續(xù)空行為一行

/字符串:向下搜索“字符串”的功能

?字符串:向上搜索“字符串”的功能

n:重復(fù)前一個搜索(與 / 或 ? 有關(guān))

N:反向重復(fù)前一個搜索(與 / 或 ? 有關(guān))

-x 數(shù)字 將“tab”鍵顯示為規(guī)定的數(shù)字空格

b 向后翻一頁

d 向后翻半頁

h 顯示幫助界面

Q 退出less 命令

u 向前滾動半頁

y 向前滾動一行

空格鍵 滾動一行

回車鍵 滾動一頁

[pagedown]: 向下翻動一頁

[pageup]: 向上翻動一頁

實例:

(1)ps 查看進(jìn)程信息并通過 less 分頁顯示

ps -aux | less -N

(2)查看多個文件

less 1.log 2.log

可以使用 n 查看下一個,使用 p 查看前一個。

12、head 命令

head 用來顯示檔案的開頭至標(biāo)準(zhǔn)輸出中,默認(rèn) head 命令打印其相應(yīng)文件的開頭 10 行。

常用參數(shù):

-n行數(shù) 顯示的行數(shù)(行數(shù)為復(fù)數(shù)表示從最后向前數(shù))

實例:

(1)顯示 1.log 文件中前 20 行

head 1.log -n 20

(2)顯示 1.log 文件前 20 字節(jié)

head -c 20 log2014.log

(3)顯示 t.log最后 10 行

head -n -10 t.log

13、tail 命令

用于顯示指定文件末尾內(nèi)容,不指定文件時,作為輸入信息進(jìn)行處理。常用查看日志文件。

常用參數(shù):

-f 循環(huán)讀取(常用于查看遞增的日志文件)

-n行數(shù) 顯示行數(shù)(從后向前)

(1)循環(huán)讀取逐漸增加的文件內(nèi)容

ping 127.0.0.1 ping.log

后臺運行:可使用 jobs -l 查看,也可使用 fg 將其移到前臺運行。

tail -f ping.log

(查看日志)

14、which 命令

在 linux 要查找某個文件,但不知道放在哪里了,可以使用下面的一些命令來搜索:

which 查看可執(zhí)行文件的位置。

whereis 查看文件的位置。

locate 配合數(shù)據(jù)庫查看文件位置。

find 實際搜尋硬盤查詢文件名稱。

which 是在 PATH 就是指定的路徑中,搜索某個系統(tǒng)命令的位置,并返回第一個搜索結(jié)果。使用 which 命令,就可以看到某個系統(tǒng)命令是否存在,以及執(zhí)行的到底是哪一個位置的命令。

常用參數(shù):

-n  指定文件名長度,指定的長度必須大于或等于所有文件中最長的文件名。

實例:

(1)查看 ls 命令是否存在,執(zhí)行哪個

which ls

(2)查看 which

which which

(3)查看 cd

which cd(顯示不存在,因為 cd 是內(nèi)建命令,而 which 查找顯示是 PATH 中的命令)

查看當(dāng)前 PATH 配置:

echo $PATH

或使用 env 查看所有環(huán)境變量及對應(yīng)值

15、whereis 命令

whereis 命令只能用于程序名的搜索,而且只搜索二進(jìn)制文件(參數(shù)-b)、man說明文件(參數(shù)-m)和源代碼文件(參數(shù)-s)。如果省略參數(shù),則返回所有信息。whereis 及 locate 都是基于系統(tǒng)內(nèi)建的數(shù)據(jù)庫進(jìn)行搜索,因此效率很高,而find則是遍歷硬盤查找文件。

常用參數(shù):

-b 定位可執(zhí)行文件。

-m 定位幫助文件。

-s 定位源代碼文件。

-u 搜索默認(rèn)路徑下除可執(zhí)行文件、源代碼文件、幫助文件以外的其它文件。

實例:

(1)查找 locate 程序相關(guān)文件

whereis locate

(2)查找 locate 的源碼文件

whereis -s locate

(3)查找 lcoate 的幫助文件

whereis -m locate

Linux上如何查看某個進(jìn)程的線程

1。 使用top命令,具體用法是 top -H

加上這個選項,top的每一行就不是顯示一個進(jìn)程,而是一個線程。

2。 使用ps命令,具體用法是 ps -xH

這樣可以查看所有存在的線程,也可以使用grep作進(jìn)一步的過濾。

3。 使用ps命令,具體用法是 ps -mq PID

這樣可以看到指定的進(jìn)程產(chǎn)生的線程數(shù)目。

更進(jìn)一步,其實一些系統(tǒng)監(jiān)控工具,在本質(zhì)上也是讀取的系統(tǒng)產(chǎn)生的文件罷了。比如說進(jìn)程這個事情,

看看這個目錄吧,/proc/5000/ 這里面有你所有想要的。其實stat代表著當(dāng)前的一些信息。

使用ps命令來查看進(jìn)程的時候,進(jìn)程狀態(tài)分別對應(yīng)的含義如下:

D 不可中斷睡眠 (通常是在IO操作) 收到信號不喚醒和不可運行, 進(jìn)程必須等待直到有中斷發(fā)生

R 正在運行或可運行(在運行隊列排隊中)

S 可中斷睡眠 (休眠中, 受阻, 在等待某個條件的形成或接受到信號)

T 已停止的 進(jìn)程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行

W 正在換頁(2.6.內(nèi)核之前有效)

X 死進(jìn)程 (未開啟)

Z 僵尸進(jìn)程 進(jìn)程已終止, 但進(jìn)程描述符存在, 直到父進(jìn)程調(diào)用wait4()系統(tǒng)調(diào)用后釋放BSD風(fēng)格的

高優(yōu)先級(not nice to other users)

N 低優(yōu)先級(nice to other users)

L 頁面鎖定在內(nèi)存(實時和定制的IO)

s 一個信息頭

l 多線程(使用 CLONE_THREAD,像NPTL的pthreads的那樣)

+ 在前臺進(jìn)程組

分享標(biāo)題:linux線程操作命令 linux線程詳解
瀏覽路徑:http://muchs.cn/article34/ddiicpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)虛擬主機、網(wǎng)站建設(shè)品牌網(wǎng)站制作、移動網(wǎng)站建設(shè)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營