내 코드에서 컴파일된 실행 파일이 있습니다. Raspberry Pi Zero udev
W 에 직렬 장치를 연결할 때 이 실행 파일을 실행하려고 합니다 . 그러나 어떤 이유로 실행 파일이 실행되지 않습니다. 살펴보니 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 xxxxx
xxxxx는 PID 파일의 PID입니다.
답변3
바라보다 man 7 udev
:
데몬이나 기타 장기 실행 프로세스는 시작될 수 없습니다. 분리 여부에 관계없이 분기된 프로세스는 이벤트 처리가 완료된 후 무조건 종료됩니다.
udev 규칙에서 백그라운드 프로세스를 실행하려면 systemd 서비스를 만들고 systemctl start <your_service>
.