#competitive-programming #sandbox #cli #process #isolation #cgroup #light

bin+lib catj

A light process isolation sandbox used for competitive programming contest

11 releases

0.2.3 Oct 6, 2023
0.2.2 Oct 6, 2023
0.2.0 Jan 30, 2023
0.1.5 Jan 27, 2023
0.0.0 Jan 20, 2023

#1314 in Command line utilities

MIT license

81KB
2.5K SLoC

CatJ

CI

A light process isolation sandbox used for Competitive Programming contest.

Features

  • cgroups: Record cpu and memory usage (may fall back to getrusage)
  • mount and chroot: Created an isolated file system
  • setrlimit: Set resource limits (cpu, address size, stack size, file size)
  • setuid and setgid: Run submission under another user and group
  • ptrace: Filter submission syscall

Note

To enable all of above features, it is highly recommended to use it under the root user, otherwise it may fall back automatically.

Installation

# Install using cargo
$ cargo install catj

# Or you can download binary with installation script
$ curl -fsSL https://bina.egoist.sh/CaCatHead/CatBox | sh

# Check installation
$ catj --version
catj 0.2.3

# Init cgroup for current user
$ ./init.sh $USER

Usage

# Compile C++ source code
$ catj compile ./fixtures/aplusb/source/ac.cpp -o a.out

# Run a.out
$ catj run --stdin ./fixtures/aplusb/testcases/1.in --read . -- ./a.out
2

# Generate report
$ catj --report run --stdin ./fixtures/aplusb/testcases/1.in --stdout ./sub.out --read . -- ./a.out
# or
$ catj -r run -i ./fixtures/aplusb/testcases/1.in -o ./sub.out -R . -- ./a.out
Status     0
Signal     ✓
Time       1 ms
Time user  1 ms
Time sys   0 ms
Memory     0 KB

License

MIT License © 2023 XLor

Dependencies

~8–21MB
~284K SLoC