35 Fd和命名管道實現shell併發控制

2021-10-05 17:41:05 字數 3686 閱讀 1691

[root@localhost code]# cat multi_process_test01.sh

#!/usr/bin/bash

#ping01

for i in

do &

done

wait

echo "all completed..."

多程序方式併發,返回時間是亂序的。

[root@localhost code]# cat user_add_multi_process.sh

#!/usr/bin/bash

##########################################

#user_add #

#v0.1 by abc #

##########################################

for i in

do & # 用後台符&實現併發

done

wait

echo "completed..."

併發,有程序數量的限制,不可無限制的增加。如果併發數量較多時,就會有問題。需要對併發數量進行控制

$$: 當前程序

[root@localhost code]# exec 6<> /file1 # 檔案描述符6,開啟檔案file1

[root@localhost code]# cat /proc/$$/fd/6 # 由於檔案描述符/控制代碼6還在,因此檔案並沒有被刪除

111[root@localhost code]# cp /proc/$$/fd/6 /file1

[root@localhost code]# exec 6

[root@localhost code]# ll /proc/$$/fd

total 0

lrwx------. 1 root root 64 may 3 18:08 0 -> /dev/pts/0

lrwx------. 1 root root 64 may 3 18:08 1 -> /dev/pts/0

lrwx------. 1 root root 64 may 3 18:08 2 -> /dev/pts/0

lrwx------. 1 root root 64 may 3 19:56 255 -> /dev/pts/0

通過exec開啟乙個檔案:exec 6<> /file1

通過exec關閉乙個檔案:exec 6

如果檔案控制代碼/描述符fd沒有被釋放,即使刪除原始檔,檔案描述符/內容仍然存在,不會影響fd

[root@localhost code]# file /tmp/fifo1 #命名管道

/tmp/fifo1: fifo (named pipe)

[root@localhost code]# cat /tmp/fifo1 #沒有內容

命名管道:只能在當前tty下面執行。

匿名管道:可以將內容傳遞給另乙個tty。

在tty0上面 rmp-qa > tmp/tmpfifo  裝入內容後

在tty1上面就可以讀取內容。但是只能讀取一次,後續就沒有了

普通管道和命名管道

2116 0 管道分為普通管道和命名管道 兩者都是半雙工的。普通管道只能用於父子程序或兄弟程序間的通訊,因為普通管道通過fork呼叫來拷貝檔案描述符的,在檔案系統中,普通管道並不對應物理檔案。命名管道在檔案系統中有物理檔案存在,因此可以用於非親屬的程序間通訊。include int pipe int...

命名管道和匿名管道

我們知道程序間是可以通訊的。可以達到資料傳輸 資源共享 事件通知 程序控制等目的。程序間通訊主要包括管道 系統ipc,套接字等。管道分為三種 1 普通管道 int pipe int fds 2 返回值0表示成功,1表示失敗 fd 0 讀 fd 1 寫 子程序往管道中寫資料,寫資料時要關閉讀端 父程序...

linux的管道和命名管道

看了個教程,感覺還是要結合 看。管道是linux裡面程序間通訊的一種方式,其他的還有像訊號 signal 訊號量 訊息佇列 共享記憶體 套接字 socket 等。1.管道pipe int pipe int fd 2 返回值 成功,返回0,否則返回 1。引數陣列包含pipe使用的兩個檔案的描述符。fd...