파일 F에 콘텐츠를 쓰는 프로세스 P가 있습니다. F에 쓰기 위해 P를 동적으로 활성화/비활성화할 수 있어야 합니다. 사용자/그룹의 권한을 변경하려고 시도했지만 이로 인해 프로세스(사실 전체 시스템)를 다시 시작해야 했습니다. 마지막으로 다음을 수행하는 "스크립트"를 실행할 수 있어야 합니다.
EnablePWriteF
sleep 10
DisablePWriteF
따라서 처음 10초 동안 P에 쓸 수 있지만 그 이후에는 쓸 수 없습니다. 저는 데비안 배포판을 사용하고 있습니다.
가능합니까?
업데이트: 실제 사용 사례는 특정 장치 파일 /dev/fb0에 쓰기 위해 주어진 프로세스를 필터링하려고 한다는 것입니다. 해당 파일에 쓰는 두 개의 프로세스가 있고 그 중 어느 프로세스를 정확하게 결정할 수 있기를 원합니다. 주어진 순간에 두 개의 프로세스가 허용됩니다. 프로세스를 종료/중지하지 않고 파일에 씁니다.
답변1
적어도 내 버전의 Linux에서는 강제 잠금을 사용할 수 있는 것 같습니다. 나는 그것을 다음 /dev/null
과 같이 테스트했습니다.
루트 사용자로서:
mount -t tmpfs -o mand locked-fb some-dir
cp -a /dev/fb0 some-dir/fb0-for-process-A
cp -a /dev/fb0 some-dir/fb0-for-process-B
chmod g+s some-dir/fb0-for-process-[AB] # enable mand-lock
예를 들어 perl
and File::FcntlLock
모듈을 사용하거나 C에서 직접 수행하는 경우:
#! /usr/bin/perl
use File::FcntlLock;
$l = new File::FcntlLock;
$l->l_type(F_RDLCK);
open my $fba, '<', 'some-dir/fb0-for-process-A' or die$!;
sleep 10; # writing OK
$l->lock($fba, F_SETLK); # writing blocked on fb0-for-process-A
sleep 10;
exit; # lock now released (or do an explicit unlock)
한 프로세스가 해당 파일을 통해 fb0 장치를 열고 fb0-for-process-A
다른 프로세스를 통해 fb0-for-process-B
두 파일에 잠금을 적용하여 주어진 시간에 어떤 프로세스가 쓸 수 있는지 결정하도록 합니다.
답변2
아니요, 그렇지 않습니다(내가 아는 한). 파일 접근 권한은 파일이 열려 있을 때만 확인됩니다(그리고 이를 실행 취소하기 위한 시스템 호출이 없습니다.), 따라서 프로세스에 쓰기 권한이 있는 파일 핸들이 있으면 쓰기 권한이 있는 것입니다.
(파일에 대한 간단한 작업을 수행하는 경우 chmod
재부팅이 필요하지 않습니다. 그룹 구성원 등을 변경하는 경우 변경 사항을 적용하려면 다시 로그인해야 합니다.)
일반적으로 말하면, 출력을 파이프로 보내고 파이프의 읽기 측에서 데이터가 처리(또는 전달)되거나 삭제되는지 여부를 제어하도록 할 수 있습니다. (그러나 일부 장치 파일의 사용 사례에 대한 나중에 명확한 설명은 이 점에 대해 약간의 논쟁을 불러일으킵니다.)