임베디드 시스템으로 뭔가를 하시려는 분들은 요즘 라즈베리파이 시리즈나 오드로이드 시리즈의 리눅스를 많이 쓰시니까 보드를 키자마자 프로그램을 자동실행하게 하는 경우가 많을 것 같습니다.
저도 쿼드콥터 위에 오드로이드C1를 올려서 자동주행 알고리즘 연구를 하고있는데, 리눅스 고급유저가 아닌지라 많이 헤메게 되네요 ㅠㅠ
보통 자동실행은 /etc/rc.local 파일에 실행시킬 프로그램 경로를 써서 하게됩니다.
/root/hsPi/wing &
이런 식으로 써두는데 &는 백그라운드로 실행하라는 의미입니다. 백그라운드로 실행시키지 않으면 부팅 중간에 저 프로그램을 실행했다가 부팅과정을 마저 못끝내는 현상이 발생하더라구요 (저 프로그램은 loop구조라 끝나지 않는 프로그램..)
보통 이렇게 자동실행을 등록해서 사용해왔습니다. 그런데!
오드로이드C1에 올린 리눅스 우분투에서 위처럼 자동실행을 등록해놨는데 두 번 실행되는 문제가 발생했습니다.
아두이노와 Serial통신을 일정 주기마다 일정 크기만큼 주고받는데, 프로그램 두개가 한번에 보내니 아두이노에서 못받는 현상이 생기더라구요
부팅 과정을 짚어봐도 도저히 고칠수가 없길래 그냥 프로그램이 이미 실행중이면 실행하지 말라는 쉘 스크립트로 해결했습니다. ㅜ 뭔가 찜찜한 기분..
리눅스 중복실행 방지로 검색하니까 좋은 소스가 있어서 사용중입니다.
#load date |
도움 - http://breezymoon.blogspot.kr/2013/09/shell-script-to-avoid-duplicate-runs.html
'Linux' 카테고리의 다른 글
OpenCV 2.4.9 on Ubuntu 14.04 (0) | 2015.06.15 |
---|