Linux管道pipeline使用時需要注意的問題

2021-10-24 21:19:51 字數 3923 閱讀 8421

1. 管道會將前乙個命令的輸出作為後乙個命令的輸入

[root@node01 /]

# ll | more

total 94

dr-xr-xr-x. 2 root root 4096 oct 15 07:19 bin

dr-xr-xr-x. 5 root root 1024 oct 15 00:17 boot

drwxr-xr-x. 2 root root 4096 oct 9 2018 cgroup

drwxr-xr-x. 19 root root 3740 oct 16 07:20 dev

drwxr-xr-x. 63 root root 4096 oct 16 10:38 etc

drwxr-xr-x. 2 root root 4096 sep 23 2011 home

dr-xr-xr-x. 8 root root 4096 oct 15 00:07 lib

dr-xr-xr-x. 9 root root 12288 oct 15 07:19 lib64

drwx------. 2 root root 16384 aug 7 06:24 lost+found

drwxr-xr-x. 2 root root 4096 sep 23 2011 media

drwxr-xr-x. 2 root root 4096 sep 23 2011 mnt

drwxr-xr-x. 4 root root 4096 oct 15 07:45 opt

dr-xr-xr-x. 93 root root 0 oct 16 07:19 proc

dr-xr-x---. 3 root root 4096 oct 15 23:23 root

dr-xr-xr-x. 2 root root 12288 oct 15 07:19 sbin

drwxr-xr-x. 7 root root 0 oct 16 07:19 selinux

drwxr-xr-x. 2 root root 4096 sep 23 2011 srv

drwxr-xr-x 13 root root 0 oct 16 07:19 sys

drwxrwxrwt. 3 root root 4096 oct 16 07:20 tmp

drwxr-xr-x. 13 root root 4096 aug 7 06:24 usr

drwxr-xr-x. 17 root root 4096 aug 7 06:24 var

2. 管道兩邊會建立子程序
[root@node01 /]

# num=0

[root@node01 /]

# echo $num

0[root@node01 /]

# ((num++))

[root@node01 /]

# echo $num

1[root@node01 /]

# ((num++)) | echo ok

ok[root@node01 /]

# echo $num

1

3.$$代表/bin/bash,$bashpid同樣代表/bin/bash,但是二者有區別,$$的優先順序高於|$bashpid的優先順序低於|
[root@node01 /]

# echo $$ | more

1728

[root@node01 /]

# echo $$

1728

[root@node01 /]

# echo $bashpid | more

1764

[root@node01 /]

# echo $bashpid | more

1766

4. linux父子程序的資料隔離

請區分exit退出子程序前後的現象

exit之前展示的是父子程序的資料是隔離的

exit之後展示的是父程序可以讓子程序看到自己的資料,需要export

對於export的環境變數,子程序的修改不會影響父程序,父程序的修改也不會影響子程序(**沒有演示)

[root@node01 /]

# num=0

[root@node01 /]

# echo $num

0[root@node01 /]

# echo $$

1728

[root@node01 /]

# /bin/bash

[root@node01 /]

# echo $$

1772

[root@node01 /]

# pstree

init─┬─auditd───

├─login───bash

├─5*[mingetty]

├─mysqld_safe───mysqld───27*[

] ├─3*[redis-server───4*]

├─rsyslogd───3*[

] ├─sshd───sshd───bash───bash───pstree

└─udevd───2*[udevd]

[root@node01 /]

# echo $num

[root@node01 /]

# [root@node01 /]

# exit

exit

[root@node01 /]

# pstree

init─┬─auditd───

├─login───bash

├─5*[mingetty]

├─mysqld_safe───mysqld───27*[

] ├─3*[redis-server───4*]

├─rsyslogd───3*[

] ├─sshd───sshd───bash───pstree

└─udevd───2*[udevd]

[root@node01 /]

# echo $num

0[root@node01 /]

# export num

[root@node01 /]

# /bin/bash

[root@node01 /]

# pstree

init─┬─auditd───

├─login───bash

├─5*[mingetty]

├─mysqld_safe───mysqld───27*[

] ├─3*[redis-server───4*]

├─rsyslogd───3*[

] ├─sshd───sshd───bash───bash───pstree

└─udevd───2*[udevd]

[root@node01 /]

# echo $num

0[root@node01 /]

#

5. 如何讓程序在後台執行

在指令後面加個&

[root@node01 /]

# ./test.sh &

6. fork()建立子程序的原理

寫時複製

目的:避免建立子程序時拷貝了大量的父程序裡的資料,因為子程序可能不會把所有父程序的資料都重新寫一遍

更詳細的可以參閱:

Redis管道機制(pipeline)

redis管道機制 pipeline redis的管道機制,其實是為了批量讀寫而設計的,如果進行多次的讀和寫資料到redis,每次都建立乙個鏈結,這樣是比較消耗資源的,而且也比較忙,於是想到了管道機制 pipeline 只建立乙個連線,然後批量執行讀或寫。插入資料效果 非管道 資料量 2w,執行時間...

pipeline管道初體驗

最近在乙個電商專案中,應用到了pipeline,特地和大家分享一下。由於在訂單生成時,會進行1 初始化,2驗證,3,操作 優惠劵 減價 拆分訂單 4儲存訂單,5,訂單審批流處理等等。以此說明這個流程是相當複雜的。然後就使用 了pipeline管道。pipeline模型應用可以外掛程式式的按邏輯處理一...

Redis 管道技術 Pipeline

管道技術 pipeline 是客戶端提供的一種批處理技術,用於一次處理多個 redis 命令,從而提高整個互動的效能。通常情況下 redis 是單行執行的,客戶端先向伺服器傳送請求,服務端接收並處理請求後再把結果返回給客戶端,這種處理模式在非頻繁請求時不會有任何問題。但如果出現集中大批量的請求時,因...