백그라운드 ping 호출을 수행하는 ping 스크립트를 실행 중입니다.
#!/bin/bash for ip in $(seq 100 210); do ping x.x.x.$ip -c1 |grep "bytes from" |cut -d " " -f4|cut -d ":" -f1 & done
fork: retry: Resource temporarily unavailable
루프 반복 중에 오류가 발생하면 해당 반복이 되돌릴 수 없게 실패합니까, 아니면 리소스를 사용할 수 있게 되면 스크립트가 자동으로 다시 실행을 시도합니까?
답변1
운영 체제는 실패한 명령을 자체적으로 다시 시작할 수 없습니다. 그러나 이러한 메커니즘을 스크립트에 구축할 수 있습니다. 포크가 실패하면 -1이 반환되고 하위 프로세스가 생성되지 않습니다. 위와 같은 오류가 발생하는 이유는 다음과 같습니다.이가온. 리소스 제한(ulimit 및 메모리)을 확인하세요. 아래 매뉴얼 페이지의 관련 섹션 -
RETURN VALUE
On success, the PID of the child process is returned in the parent,
and 0 is returned in the child. On failure, -1 is returned in
the parent, no child process is created, and errno is set appropriately.
EAGAIN fork() cannot allocate sufficient memory to copy the parent's page tables and
allocate a task structure for the child.
EAGAIN It was not possible to create a new process because the caller's RLIMIT_NPROC
resource limit was encountered. To exceed this limit, the
process must have either the CAP_SYS_ADMIN or the CAP_SYS_RESOURCE capability.