-
Notifications
You must be signed in to change notification settings - Fork 4
execution
jayoon edited this page Sep 25, 2022
·
4 revisions
pipe 단위로 끊어지는 command 는 simple cmd 와 redir_iter 로 이루어져 있다. 이때 fd 를 최종적으로 어디로 연결하고 execve 를 실행하나를 고려해야 하는데 그 순서는 다음과 같다.(순서대로 업데이트 해야 한다)
1. 기존 standard fd(0 == stdin, 1 == stdout, 2 == strerr)
2. pipe 가 존재하면 그에 따라 이전 cmd 의 출력물을 읽어오거나 다음 cmd 에게 출력물을 넘기기 위해 dup2 해야 한다.
3. redirection 이 존재하면 그 file 로 open 하고 dup2 해야 한다.
bash-3.2$ ls | cat b.txt | cat a.txt
cdaf
r
g
rg
rs
fgr
eg
e
bash-3.2$ cat b.txt
a.txt
b.txt
c.txt
execve.c
func_test
jayoon
test
일단 기본적으로 1) standard fd, 2)pipe, 3) redirection 을 확인하고 update 를 하며 마지막에 인자가 있고, 그 인자가 올바르다면 내부적으로 그 파일의 fd 로 연결되는 모양이다.
즉, 히어독의 우선 순위가 가장 높고, 이것들이 정상 실행 되었을 때 처음 cmd 부터 실행된다.
bash-3.2$ ls
func_test
bash-3.2$ cat << a | ls > 20 | ls> 10 | ls > 1 | cat << a
> ad
> ads
> a
>
bash-3.2$ ls
func_test
bash-3.2$ ls > 1 | ls > 2 | ls > 3 | ls > 4| ls >5| ls >6| ls >7| ls >8| ls >9| ls >10| ls >11| ls >12| ls >13 | ls >14|ls >15|ls>16|ls>17|ls>18|ls>19|ls>20|ls>21|ls>22|ls>23|ls>24|ls>25
bash-3.2$ ls
1 14 19 23 5 func_test
10 15 2 24 6
11 16 20 25 7
12 17 21 3 8
13 18 22 4 9
bash-3.2$ cat 1
1
2
3
4
5
6
7
func_test
bash-3.2$ cat 2
1
2
3
4
5
6
func_test
bash-3.2$ cat 3
1
2
3
4
5
6
7
func_test
bash-3.2$ cat 4
1
2
3
4
5
6
7
func_test
bash-3.2$ cat 5
1
2
3
4
5
6
7
func_test
bash-3.2$ cat 6
1
10
2
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 7
1
10
2
3
4
5
6
7
8
9
func_test
bash-3.2$ cat
^C
bash-3.2$ cat 8
1
10
11
2
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 9
1
10
11
12
13
2
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 10
1
10
11
12
13
14
2
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 11
1
10
11
12
13
14
15
2
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 12
1
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 13
1
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 14
1
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 15
1
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 16
1
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 17
1
10
11
12
13
14
15
16
17
18
19
2
20
21
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 18
1
10
11
12
13
14
15
16
17
18
19
2
20
21
22
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 19
1
10
11
12
13
14
15
16
17
18
19
2
20
21
22
23
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 20
1
10
11
12
13
14
15
16
17
18
19
2
20
21
22
23
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 21
1
10
11
12
13
14
15
16
17
18
19
2
20
21
22
23
24
25
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 22
1
10
11
12
13
14
15
16
17
18
19
2
20
21
22
23
24
25
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 23
1
10
11
12
13
14
15
16
17
18
19
2
20
21
22
23
24
25
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 24
1
10
11
12
13
14
15
16
17
18
19
2
20
21
22
23
24
25
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 2
1
2
3
4
5
6
func_test
bash-3.2$ cat 25
1
10
11
12
13
14
15
16
17
18
19
2
20
21
22
23
24
25
3
4
5
6
7
8
9
func_test
bash-3.2$ cat 24
1
10
11
12
13
14
15
16
17
18
19
2
20
21
22
23
24
25
3
4
5
6
7
8
9
func_test