기본 콘텐츠로 건너뛰기

4월, 2013의 게시물 표시

[linux] 백그라운드 작업 nohup [xxx.sh] &

백그라운드 작업이 필요할 경우가 있을 수 있다. 1. 데몬형태로 뭐를 띄운다거나, 2. cpu 많이 안잡아먹는데, 실행이 겁나 오래 걸리는. (예를들면, 10g짜리 압축을 푼다거나 뭐 이런거. ㅋ ) 보통 명령어 뒤에  & 만 붙여도 백그라운드로 작업을 한다. test . sh & 그런데 이럴경우 사용자가 터미널 세션이 끊어버리면 백그라운드 중인 작업도 같이 종료되어 문제가 발생할 소지가 있다. 그래서 이럴때 쓰는 명령어 nohup nohup ./test.sh & 저러면 쉘이 실행 되면서 몇 초 정도 깜박거리거나, 해당 로그가 떨어지다가 곧 프롬프트 상태로 돌아온다. nohup 확인 그리고 나서 ps -ef 해주면 test.sh 가 떠있는걸 확인할 수 있다. nohup 종료 종료하는 방법은 따로 없다. ctrl+c, ctrl+d 백날 눌러봐야 소용없다. ㅋ ps -ef 로 해당 쉘 pid 확인해서 kill로 종료시키면 된다. kill [pid of test .sh] nohup 로그 nohup으로 실행된 쉘 스크립트는 자동으로 nohup.out   이라는 이름으로 nohup을 실행한 위치에 자동으로 생성된다.

[javascript] 브라우저 체크, 익스플로러 버전체크

우선 브라우저 체크  useragnet 값 얻어와서 브라우저 문자열 검색. 참고로 indexOf는 파라미터 문자열이 해당 문자열에 포함되어있지않을경우 '-1'을 리턴함. 포함되었을 경우에는 해당 위치(시작점- 0부터표시) var agt = navigator.userAgent.toLowerCase (); if (agt.indexOf( "chrome" ) ! = -1) return 'Chrome' ; if (agt.indexOf( "opera" ) ! = -1) return 'Opera' ; if (agt.indexOf( "staroffice" ) ! = -1) return 'Star Office' ; if (agt.indexOf( "webtv" ) ! = -1) return 'WebTV' ; if (agt.indexOf( "beonex" ) ! = -1) return 'Beonex' ; if (agt.indexOf( "chimera" ) ! = -1) return 'Chimera' ; if (agt.indexOf( "netpositive" ) ! = -1) return 'NetPositive' ; if (agt.indexOf( "phoenix" ) ! = -1) return 'Phoenix' ; if (agt.indexOf( "firefox" ) ! = -1) return 'Firefox' ; if (agt.indexOf( "safari" ) ! = -1) return 'Safari' ; if (agt.indexOf( "skipstone

랜덤함수

랜덤함수 라는게 있다. 그런데 랜덤함수는 원래 사실 전혀 랜덤하지 않다. 함수라는 것 자체가, 인위적으로 만든것이기에, 그 공식만 알아내면 다음값이 뭐가 나올지는 충분히 추론이 가능하다. 그래서, 정말 랜덤한 값이 필요한 곳에서는 랜덤함수 시드값으로 자연적으로 생기는 값을 사용한다고, 바람의 세기나 뭐그따위 것들을 말이다.ㅋ 예전에 OTP 프로토타입 만든다고, 1분마다 새로운 번호를 생성하기 위해 랜덤함수를 사용했었다. 그런데, 자바로 구축했던 OTP 인증해주는 서버하고, IOS앱에서 랜덤함수값이 서로 달라서 알아보다가 자바와 objective-c에서 사용하는 랜덤함수가 공식은 같은데, 상수값이 다르다 는 것을 확인. 그래서 상수값이 작은 objective-c부분의 랜덤함수를 자바쪽에 구현해서 해결. 자바의 상수값을 objective-c에 적용하려면 overflow가 발생한다. ㅎ 1. 랜덤함수 기본 공식     Xn+1 = (aXn + c) % M 이 공식은 Linear Congruential Generator 공식이다. ( http://en.wikipedia.org/wiki/Linear_congruential_generator ) 모든 언어라고 말하기는 그렇지만, 적어도 우리가 사용하는 언어의 대부분에서는 전부 이공식에 따라 랜덤함수를 만들었다. 언어들간의 랜덤함수 값이 다른건 a,c,M에 해당하는 상수값이 달라서 이다. 2. 언어별 LCG(Linear Congruential Generator) 상수값  대부분 상수값 자체를 크게 줘서 int의 범위를 초과하도록 overflow를 일으켜 그로 인해 얻어지는 쓰레기값을 사용하기도 한다. 3. Xn+1 = (aXn + c ) mod M (Apple CarbonLib)     Xn+1 = ( 16807 * Xn + 0 ) mod  (2의 31승 -1)             =  Xn * 16807