udev를 통해 호출된 bash 스크립트에서 내 실행 파일이 실행되지 않는 이유는 무엇입니까?

udev를 통해 호출된 bash 스크립트에서 내 실행 파일이 실행되지 않는 이유는 무엇입니까?

내 코드에서 컴파일된 실행 파일이 있습니다. Raspberry Pi Zero udevW 에 직렬 장치를 연결할 때 이 실행 파일을 실행하려고 합니다 . 그러나 어떤 이유로 실행 파일이 실행되지 않습니다. 살펴보니 top프로세스의 흔적이 없습니다.

이것은 내 udev 규칙 파일입니다 /etc/udev/rules.d/10-serial-usb.rules.

ACTION=="add", SUBSYSTEM=="usb", KERNEL=="1-1.3", ATTR{idProduct}=="7523", ATTR{idVendor}=="1a86", RUN="/bin/bash /home/blackbox/blackbox-cpp/run.sh"

Bash 스크립트는 다음과 같습니다 /home/blackbox/blackbox-cpp/run.sh.

#!/bin/bash

/home/blackbox/blackbox-cpp/bin/blackbox &

Bash 스크립트는 확실히 실행 중입니다. 스크립트 mkdir와 같은 명령을 사용하여 touch실제로 실행 중이고 모두 제대로 작동하는지 테스트했기 때문입니다. 그렇다면 내 실행 파일이 왜 다른가요?

작동하지 않는다는 것은 실행 파일이 top.

답변1

그래서 내 질문에 대답하자면 내 구성 파일을 읽는 동안 오류가 발생한 것으로 나타났습니다. JSON 파일을 사용하여 구성 집합을 읽고 있는데 udev루트 디렉터리에서 프로젝트를 실행하고 있으므로 파일을 찾을 수 없습니다.

따라서 이 문제를 해결하려면 구성 파일 경로에 변경 디렉터리를 삽입하는 bash 스크립트를 변경해야 했습니다.

#!/bin/bash

cd /home/guy/blackbox-cpp/
bin/blackbox

오류를 찾는 데 도움을 준 @terdon에게 감사드립니다.

답변2

top상위 CPU 사용자를 표시합니다(기본값). 이 목록은 실행 중인 모든 프로세스의 목록이 아닙니다. 애플리케이션은 CPU를 거의 사용하지 않으므로 최상위에 있지 않을 수 있습니다.

프로세스가 실행되고 있지 않은지 확인하려면 다음을 시도하십시오.

ps -ef | grep blackbox

스크립트를 다음과 같이 변경할 수도 있습니다.

#!/bin/bash
echo $$ > /tmp/blackbox.sh.pid
/home/blackbox/blackbox-cpp/bin/blackbox

여기서 pstree -an xxxxxxxxxx는 PID 파일의 PID입니다.

답변3

바라보다 man 7 udev:

데몬이나 기타 장기 실행 프로세스는 시작될 수 없습니다. 분리 여부에 관계없이 분기된 프로세스는 이벤트 처리가 완료된 후 무조건 종료됩니다.

udev 규칙에서 백그라운드 프로세스를 실행하려면 systemd 서비스를 만들고 systemctl start <your_service>.

관련 정보