-
Notifications
You must be signed in to change notification settings - Fork 18
Home
Welcome to the OptSched wiki!
This is a place for helpful tips and tricks for working with OptSched as a project developer.
Building the benchmark suites take a long time. There are also several long-running tasks which we may need to do. For this, the screen
command can be useful.
In it's simplest form, run: screen -q the command to run
(e.g. screen -q ninja
), or screen -q bash -c '...'
for more complex scripts which need redirection or pipes. Ctrl+AD puts the screen into the background, and you can then log out of your ssh session. screen -r
resumes.
More generally, you can have screen
work as a task queue and queue up several commands to run after each other. See this SuperUser answer:
startqueue: starts the queuing system.
#!/usr/bin/env bash
screen -d m -S queue
queue: enqueue a command
#!/usr/bin/env bash
screen -S queue -X stuff "$@^M"
Where the ^M
is a single special character. In vim in insert mode, produce it by typing Ctrl+V M. You may want to :set list
to show the special character.
viewqueue: Look at the screen.
#!/usr/bin/env bash
screen -S queue -r
We often have multiple differently-configured run results in directories. As an example, consider a/
and b/
both with 0.log
and 1.log
. How do we run a tool over the corresponding files a/0.log b/0.log
and a/1.log b/1.log
?
$ paste -d ' \n' <(find a/ -type f) <(find b/ -type f) | xargs -L1 echo
a/0.log b/0.log
a/1.log b/1.log
You could also just paste -d '\n'
and use xargs -L2
instead.
paste -d ' \n'
takes the two redirected shell results (<(...)
) and zips the lines together; with just '\n'
, the lines are interleaved.
xargs
uses stdin as the commandline arguments of what follows it, but -L#
tells it to stick to #
lines per command invocation.