mirror of https://github.com/01-edu/public.git
nprimo
2 years ago
committed by
Niccolò Primo
3 changed files with 103 additions and 0 deletions
@ -0,0 +1,59 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
|
||||||
|
# create a function to be called everytime the process exit |
||||||
|
abort () { |
||||||
|
rm exp.log job.log |
||||||
|
} |
||||||
|
|
||||||
|
trap 'abort' EXIT |
||||||
|
|
||||||
|
|
||||||
|
set -euo pipefail |
||||||
|
IFS=' |
||||||
|
' |
||||||
|
script_dirS=$(cd -P "$(dirname "$BASH_SOURCE")" &>/dev/null && pwd) |
||||||
|
|
||||||
|
SUBMITTED='student/job-regist.sh' |
||||||
|
EXPECTED='solutions/job-regist.sh' |
||||||
|
|
||||||
|
wait_bg_jobs () { |
||||||
|
while [ -n "$(jobs | grep -i running)" ]; do |
||||||
|
echo -n "." |
||||||
|
sleep 1 |
||||||
|
done |
||||||
|
echo |
||||||
|
} |
||||||
|
|
||||||
|
# test cases |
||||||
|
one_process () { |
||||||
|
sleep 2 & |
||||||
|
source $script_dirS/$1 |
||||||
|
} |
||||||
|
|
||||||
|
two_processes () { |
||||||
|
sleep 3 & |
||||||
|
sleep 4 & |
||||||
|
source $script_dirS/$1 |
||||||
|
} |
||||||
|
|
||||||
|
one_process_and_kill () { |
||||||
|
echo do something |
||||||
|
} |
||||||
|
|
||||||
|
one_process_and_suspend () { |
||||||
|
echo do something |
||||||
|
} |
||||||
|
# end of test cases |
||||||
|
|
||||||
|
challenge () { |
||||||
|
echo "testing $1 case" |
||||||
|
$1 $SUBMITTED & |
||||||
|
$1 $EXPECTED & |
||||||
|
|
||||||
|
wait_bg_jobs |
||||||
|
|
||||||
|
diff <(cat exp.log) <(cat job.log) |
||||||
|
} |
||||||
|
|
||||||
|
challenge one_process |
||||||
|
challenge two_processes |
@ -0,0 +1,11 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
|
||||||
|
IFS=' |
||||||
|
' |
||||||
|
PID=$(jobs -l %1 | grep -Eo '[\+\-] [0-9]+' | grep -Eo '[0-9]+') |
||||||
|
LOG_FILE="exp.log" |
||||||
|
|
||||||
|
while kill -0 "$PID" 2> /dev/null; do |
||||||
|
echo $(date +"%F %T") - $(jobs %1) >> "$LOG_FILE" |
||||||
|
sleep 1 |
||||||
|
done |
@ -0,0 +1,33 @@ |
|||||||
|
## job-regist |
||||||
|
|
||||||
|
### Instruction |
||||||
|
|
||||||
|
Create a script, `job-regist.sh`, that will be able to monitor a specific background job. |
||||||
|
|
||||||
|
The script needs to track the status of the first jobs spawned by the current terminal and periodically save the status into a `job.log` file. It must append the new update without modifying the previous content. |
||||||
|
|
||||||
|
Each update needs to be appended to the file with the current format: `YYYY-MM-DD hh:mm:ss - <job status>` |
||||||
|
|
||||||
|
The script should stop running as soon as the job it is tracking ends. |
||||||
|
|
||||||
|
### Usage |
||||||
|
|
||||||
|
Here an example of how the script should behave: |
||||||
|
|
||||||
|
```console |
||||||
|
$ sleep 10 & |
||||||
|
$ sleep 12 & |
||||||
|
$ source job-regist.sh |
||||||
|
$ cat job.log |
||||||
|
2023-02-08 10:37:50 - [1]+ Running sleep 10 & |
||||||
|
2023-02-08 10:37:51 - [1]+ Running sleep 10 & |
||||||
|
2023-02-08 10:37:52 - [1]+ Running sleep 10 & |
||||||
|
2023-02-08 10:37:53 - [1]+ Running sleep 10 & |
||||||
|
2023-02-08 10:37:54 - [1]+ Running sleep 10 & |
||||||
|
2023-02-08 10:37:55 - [1]+ Running sleep 10 & |
||||||
|
2023-02-08 10:37:56 - [1]+ Running sleep 10 & |
||||||
|
2023-02-08 10:37:57 - [1]+ Running sleep 10 & |
||||||
|
2023-02-08 10:37:58 - [1]+ Running sleep 10 & |
||||||
|
2023-02-08 10:37:59 - [1]+ Running sleep 10 & |
||||||
|
$ |
||||||
|
``` |
Loading…
Reference in new issue