동일한 쉘 스크립트의 새 인스턴스에 대해 새 프로세스를 생성하는 방법은 무엇입니까?

동일한 쉘 스크립트의 새 인스턴스에 대해 새 프로세스를 생성하는 방법은 무엇입니까?

lock 명령을 사용하여 파일을 잠그려고 합니다. 구문은 다음과 같습니다.

./lock </path/to/file/name>

특정 디렉터리에 있는 여러 파일을 잠가야 합니다. 이를 위해 두 개의 스크립트를 사용합니다.

  1. parent.sh
  2. child.sh

parent.shchild.sh각 파일마다 하나의 프로세스가 호출됩니다. 따라서 9개의 파일을 잠가야 한다면 parent.sh9개의 파일을 생성 해야 child.sh하지만 불행하게도 그런 일은 일어나지 않았습니다.

[root@localhost /]# cat parent.sh
#!/bin/ksh
for f in /vol4/commit/file[1-9]
do
 sh /child.sh & $f
done

[root@localhost /]# cat child.sh
#!/bin/ksh
./lock $1

실행하면 sh parent.sh다음 오류가 발생합니다.

[root@localhost /]# sh parent.sh
parent.sh: line 4: /vol4/commit/file1: Permission denied
parent.sh: line 4: /vol4/commit/file2: Permission denied
parent.sh: line 4: /vol4/commit/file3: Permission denied
parent.sh: line 4: /vol4/commit/file4: Permission denied
parent.sh: line 4: /vol4/commit/file5: Permission denied
parent.sh: line 4: /vol4/commit/file6: Permission denied
parent.sh: line 4: /vol4/commit/file7: Permission denied
parent.sh: line 4: /vol4/commit/file8: Permission denied
parent.sh: line 4: /vol4/commit/file9: Permission denied

저는 루트로 실행 중이기 때문에 여기에 권한 문제가 있을 것이라고는 예상하지 못했지만, 제가 본 것은 그렇습니다.

답변1

4번째 줄 parent.shsh /child.sh & $f. & 기호는 아래와 같이 명령 끝에 배치되어야 합니다 sh /child.sh $f &.

귀하의 경우 sh /child.sh백그라운드에서 실행한 다음 포그라운드에서 실행하려고 하면 파일이 실행 가능하지 않다고 $f가정할 수 있으므로 권한이 거부됩니다 ./vol4/commit/file[1-9]

또한 파일이 읽기 전용인 경우 루트에 대해서도 편집하거나 쓰기 잠금을 획득할 수 없다는 점에 유의하시기 바랍니다.

관련 정보