반응형

출처 : https://stackoverflow.com/questions/19461744/how-to-make-parent-wait-for-all-child-processes-to-finish

부모가 모든 자식 프로세스가 끝날 때까지 기다리는 방법?

저는 fork를 계속하기 전에 부모가 모든 자식 프로세스가 끝날 때까지 기다리는 방법을 밝힐 수 있기를 바랍니다. 실행하려는 정리 코드가 있지만 이러한 일이 발생하기 전에 자식 프로세스가 반환되어야 합니다.

for (int id=0; id<n; id++) {
  if (fork()==0) {
    // 자식
    exit(0);
  } else {
    // 부모
    ...
  }
  ...
}

3개의 답변 중 1개의 답변

pid_t child_pid, wpid; 
int status = 0; 

// 아버지 코드 (자식 프로세스가 시작하기 전에) 

for (int id=0; id<n; id++) { 
    if ((child_pid = fork()) == 0) { 
        // 자식 코드
        exit(0); 
    } 
} 

while ((wpid = wait(&status)) > 0); // 이 방법으로 아버지는 모든 자식 프로세스를 기다립니다.

// 아버지 코드 (모든 자식 프로세스가 끝난 후에)

wait 는 하위 프로세스가 종료 될 때까지 대기하고 해당 하위 프로세스의 pid를 리턴합니다. 오류가 발생하면 (예 : 하위 프로세스가 없는 경우) -1이 반환됩니다. 따라서 기본적으로 코드는 wait(대기) 오류가 끝날 때까지 자식 프로세스가 완료될 때까지 계속 기다렸다가 모두 완료되었음을 알 수 있습니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/35115585/remove-file-from-all-commits

모든 commit에서 파일 지우기

저는 폰트 파일을 업로드 했고 github에 (그 폰트파일을) 몇가지 업데이트를 배포할 권리가 없습니다.

저는 상대적으로 비활성화된 저장소를 가지고 있고 필요할 때 모든 멤버들에게 알릴 수 있는 능력이 있습니다. 저는 이 해결책 중 몇가지를 사용하였습니다. 저는 폰트의 이탈릭체와 진하기 버전의 이름 %font%가 있는 Resources\Video\%font%.ttf 라고 불리는 디렉터리에 파일을 지울 필요가 있습니다. 제가 사용해야 할 명령어는 무엇일까요?

4개의 답변 중 1개의 답변

이러한 경우 당신은 --tree-filter 옵션과 함께 Git Filter Branch 명령을 사용할 수 있습니다.

문법은 git filter-branch --tree-filter <명령> ... 입니다.

git filter-branch --tree-filter 'rm -f Resources\Video\%font%.ttf' -- --all

윈도우즈에서는 / 대신에 \를 사용해야 합니다.

명령어에 대한 설명:

< 명령 > : 구체적인 어떤 shell 명령

--tree-filter : Git은 작업 디렉터리에서 각 commit을 체크하고 당신의 명령을 실행하고 다시 commit할 것입니다.

--index-filter : Git은 git 히스토리는 갱신하지만 작업 디렉터리는 갱신하지 않습니다.

--all : 모든 branch에서 모든 commit을 filter 적용을 합니다.

참고 : 파일 경로가 확실하지 않으므로 파일 경로를 확인하십시오.

이것이 당신에게 도움이 되기를 바랍니다.

반응형
반응형

출처
https://stackoverflow.com/questions/4824590/propagate-all-arguments-in-a-bash-shell-script

bash 쉘 스크립트에서 모든 인수를 전달

저는 다른 스크립트를 호출하는 애무 간단한 스크립트를 작성하였고 현재 스크립트로부터 실행할 스크립트로 파라미터를 전달할 필요가 있습니다.
예를 들어 제 스크립트는 foo.sh이고 bar.sh를 호출합니다.
foo.sh:

bar $1 $2 $3 $4

각 파라미터를 명시적으로 지정하지 않고 이를 어떻게 할 수 있을까요?


8개의 답변 중 1개의 답변만 추려냄

같은 것을 파라미터로 사용하길 원하신다면 순수한 $@대신에 "$@"를 사용하세요.
확인:

$ cat foo.sh
#!/bin/bash
baz.sh $@

$ cat bar.sh
#!/bin/bash
baz.sh "$@"

$ cat baz.sh
#!/bin/bash
echo Received: $1
echo Received: $2
echo Received: $3
echo Received: $4

$ ./foo.sh first second
Received: first
Received: second
Received:
Received:

$ ./foo.sh "one quoted arg"
Received: one
Received: quoted
Received: arg
Received:

$ ./bar.sh first second
Received: first
Received: second
Received:
Received:

$ ./bar.sh "one quoted arg"
Received: one quoted arg
Received:
Received:
Received:
반응형

+ Recent posts