new matlab functions: background processes via queue_*.m
This commit is contained in:
parent
3bdc4650ab
commit
e756433aa6
22
matlab/queue_addProcess.m
Normal file
22
matlab/queue_addProcess.m
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
function [pid,filenames] = queue_addProcess( command )
|
||||||
|
% [pid,filenames] = queue_addProcess( command )
|
||||||
|
%
|
||||||
|
% Sebastian Held <sebastian.held@uni-due.de>
|
||||||
|
% 12.5.2010
|
||||||
|
|
||||||
|
if ~isunix
|
||||||
|
error 'your OS is not supported (Unix only)'
|
||||||
|
end
|
||||||
|
|
||||||
|
if nargout > 1
|
||||||
|
filenames.stdout = tempname;
|
||||||
|
filenames.stderr = tempname;
|
||||||
|
else
|
||||||
|
filenames.stdout = '/dev/null';
|
||||||
|
filenames.stderr = '/dev/null';
|
||||||
|
end
|
||||||
|
|
||||||
|
cmd = ['(' command ') >' filenames.stdout ' 2>' filenames.stderr ' & echo $!' ];
|
||||||
|
[~,result] = unix( cmd );
|
||||||
|
|
||||||
|
pid = str2double(result);
|
25
matlab/queue_checkProcess.m
Normal file
25
matlab/queue_checkProcess.m
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
function [alive,stdout,stderr] = queue_checkProcess( pid, filenames )
|
||||||
|
% [alive,stdout,stderr] = queue_checkProcess( pid )
|
||||||
|
%
|
||||||
|
% Sebastian Held <sebastian.held@uni-due.de>
|
||||||
|
% 12.5.2010
|
||||||
|
|
||||||
|
if ~isunix
|
||||||
|
error 'your OS is not supported (Unix only)'
|
||||||
|
end
|
||||||
|
|
||||||
|
if nargout > 1
|
||||||
|
fid = fopen( filenames.stdout );
|
||||||
|
stdout = fread(fid);
|
||||||
|
fclose(fid);
|
||||||
|
end
|
||||||
|
if nargout > 2
|
||||||
|
fid = fopen( filenames.stderr );
|
||||||
|
stderr = fread(fid);
|
||||||
|
fclose(fid);
|
||||||
|
end
|
||||||
|
|
||||||
|
cmd = ['ps --no-headers -p' num2str(pid) ];
|
||||||
|
[status,~] = unix( cmd );
|
||||||
|
|
||||||
|
alive = (status == 0);
|
40
matlab/queue_delProcess.m
Normal file
40
matlab/queue_delProcess.m
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
function [stdout,stderr] = queue_delProcess( pid, filenames )
|
||||||
|
% [stdout,stderr] = queue_delProcess( pid, filenames )
|
||||||
|
%
|
||||||
|
% if pid == 0, do not kill a process, but clean up files
|
||||||
|
%
|
||||||
|
% Sebastian Held <sebastian.held@uni-due.de>
|
||||||
|
% 12.5.2010
|
||||||
|
|
||||||
|
if ~isunix
|
||||||
|
error 'your OS is not supported (Unix only)'
|
||||||
|
end
|
||||||
|
|
||||||
|
if pid ~= 0
|
||||||
|
alive = queue_checkProcess( pid );
|
||||||
|
|
||||||
|
if alive
|
||||||
|
unix( ['kill ' num2str(pid)] );
|
||||||
|
alive = queue_checkProcess( pid );
|
||||||
|
end
|
||||||
|
if alive
|
||||||
|
pause(1)
|
||||||
|
unix( ['kill ' num2str(pid)] );
|
||||||
|
alive = queue_checkProcess( pid );
|
||||||
|
end
|
||||||
|
if alive
|
||||||
|
unix( ['kill -KILL ' num2str(pid)] );
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if nargin > 1
|
||||||
|
if nargout == 1
|
||||||
|
[~,stdout] = queue_checkProcess( pid, filenames );
|
||||||
|
end
|
||||||
|
if nargout == 2
|
||||||
|
[~,stdout,stderr] = queue_checkProcess( pid, filenames );
|
||||||
|
end
|
||||||
|
|
||||||
|
delete( filenames.stdout );
|
||||||
|
delete( filenames.stderr );
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user